面试题 8:二叉树的下一个节点

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


考虑不同位置的节点的下一个节点:

  1. 节点有右子树:从右子节点出发一直沿着左指针向下遍历,就能找到下一个节点;
  2. 节点没有右子树:
    • 节点是它父节点的左子节点:下一个节点就是它的父节点;
    • 节点是它父节点的右子节点:沿着父指针一直向上遍历,直到找到一个是它父节点的左子节点的节点,这个节点的父节点就是我们要找的下一个节点。反之,则没有下一个节点;

Source Code