题目:给定一个二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左,右孩子节点的指针,还有一个指向父节点的指针

 

 

 如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。即从右子节点出发一直沿着指向左子节点的指针,我们就能找到它的下一个节点

如果一个节点没有右子树,如果节点是它父节点的左子节点,那么它的下一个节点就是它的父节点。

如果一个节点既没有右子树,并且它还是它父节点的右子节点。我们可以沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子节点的节点。如果这样的节点存在,那么这个节点的父节点就是我们要找的下一个节点(以i为例,找到b,找到a)

剑指offer代码:

 

主要逻辑也同上,按照其是否有右子树,有右子树就一直往左找;如果没有右子树则不需要考虑其左子树,就开始看其是其父节点的左孩子还是右孩子,左孩子则其父节点就是其下一个节点,如果是右孩子则表示以其父节点为根的子树访问完了,继续往上,直到找到一个节点是其对应父节点的左孩子,表示这个左子树完了,所以其父节点就是下一个要访问的节点。