给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
问题分析
本题共有以下三种情况:
1.如果该结点有右孩子,那么它的下一个结点就是其右子树中最左边的结点;
2.如果该结点有父结点,且为父结点的左孩子,那么它的下一个结点就是其父结点;
3.如果该结点有父结点,且为父结点的右孩子,那么继续向上寻找,直到找到这样一个结点:它是它的父结点的左孩子。如果这样的结点存在,那么这个结点的父结点就是题目要找的下一个结点。否则,给定的结点为中序遍历的最后一个结点,它没有下一个结点。
算法实现
- Java
1 | /* |
- Python
1 | # class TreeLinkNode: |