此树的中序遍历结果为:d -> b -> h -> e -> i -> a -> f -> c -> g
我们按照中序遍历分情况进行讨论:
第一种:该节点有右子树,则根据中序遍历序列,下一个节点是该节点右子树的最左子树,举例说明:b 节点的下一个节点是 h;c 节点的下一个节点是 g
第二种:该节点没有右子树,按照中序遍历序列,此时我们应该向追溯到上一层,此时就可以再次分情况了:
第一种:该节点是其父节点的左孩子,则下一个节点即为该节点的父节点,举例说明:h 节点的下一个节点是它的父节点 e
第二种:该节点是其父节点的右孩子,则这个节点一定是某颗子树中序遍历的最后一个节点,那么下一个节点即为这颗子树根节点的父节点。我们需要做的是找出这颗子树,并且这棵树一定是包含该节点但是不包含根节点(否则该节点的下一个节点为空)的最上层子树。所以此时我们需要做的是沿着指向父节点的指针向上遍历,直到找到是它父节点的左子节点的节点,以该节点为根的子树就是我们要找的,此时下一个节点即为该节点的父节点。举例说明:i 节点的下一个节点,我们需要通过指向父节点的指针一直向上找到 b 节点,此时 i 节点的下一个节点即为 b 节点的父节点