二叉树的下一个节点
题目
给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。
思路
首先自己在草稿纸上画图,进行分析(不再展开)。可以发现下一个结点的规律为:
- 若当前节点有右子树,旗下一个节点为右子树中最左子节点;
- 若当前节点无右子树时,
- 若当前节点为其父节点的左子结点时,其子啊一个节点为其父节点;
- 若当前节点为其父节点的右子节点时,继续向上遍历父节点的父节点,直到找到一个节点是其父节点的左子结点(与(1)中判断相同),该节点的父节点即为下一节点。
测试用例
- 正常二叉树
- 左斜树、右斜树
- 单个节点
- null
- 不同位置节点的下一节点(包含下一个节点为当前节点的右子树节点,右子树的最左子节点,父节点,跨层的父节点等;当前节点没有下一个节点)
Java代码
1 | public class NextNodeInBinaryTrees { |
下面是测试代码:
1 | public class NextNodeInBinaryTrees { |
总结
- 在面对复杂问题时要学会画图和举例分析。
- 在分情况讨论时,一定要考虑到所有情况,这些都是在写代码前需要考虑到的。