【题目1】一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点。
1、对二叉树进行中序遍历,依次出现的节点值会一直升序,如果两个节点值错了,会出现降序。
2、如果在中序遍历时节点值出现了两次降序,第一个错误的节点为第一次降序时较大的节点,第二个错误的节点为第二次降序时较小的节点。
3、如果在中序遍历时节点值只出现了一次降序,第一个错误的节点为这次降序时较大的节点,第二个错误的节点为这次降序时较小的节点。
4、依然是改写一个基本二叉树的中序遍历。
【题目2】从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。比如大家看到的图中,节点4和节点2的距离为2,节点5和节点6的距离为5。给定一棵二叉树的头节点head,求整棵树上节点间的最大距离。
一个以h为头的树上,最大距离只可能来自以下三种情况:
情况一:h的左子树上的最大距离。
情况二:h的右子树上的最大距离。
情况三:h左子树上离h左孩子最远的距离,加上h自身这个节点,再加h右子树上离h右孩子的最远距离,也就是两个节点分别来自h两侧子树的情况。
三