一、题目
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
二、分析及代码
1. 分类讨论
(1)思路
可按照当前结点是否存在右子树分类讨论:
1)右子树不为空,下一个结点为右子树中的最左结点;
2)右子树为空,下一个结点为当前结点及其父节点中,第一个作为左子结点的父结点。
(2)代码
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode) {
if (pNode == null)
return null;
TreeLinkNode node = pNode;
if (pNode.right != null) {//右子树不为空的情况
node = pNode.right;
while (node.left != null)
node = node.left;
}
else {//右子树为空的情况
while (node.next != null && node.next.left != node)//若作为右结点,进一步寻找父结点
node = node.next;
node = node.next;
}
return node;
}
}
(3)结果
运行时间 28ms,占用内存 10988k。
三、其他
暂无。