题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
算法思想
主要考虑以下几点:
- 如果当前节点有右孩子,则中序排列下一个节点为右孩子的最左节点
- 如果当前节点node没有右孩子,则一直找到该节点的父节点,满足当前节点的父节点的左孩子是当前节点,则中序排列下一个节点为当前节点的父节点,否则为空
- 如果当前节点为空,则返回空
代码实现
public TreeLinkNode GetNext(TreeLinkNode pNode){
if(pNode == null)
return null;
TreeLinkNode tmp;
if(pNode.right != null){
tmp = pNode.right;
while(tmp.left != null){
tmp = tmp.left;
}
return tmp;
}
if(pNode.next != null){
if(pNode.next.left == pNode)
return pNode.next;
else{
tmp = pNode.next;
while(tmp.next != null && tmp.next.left != tmp){
tmp = tmp.next;
}
if(tmp.next == null)
return null;
else
return tmp.next;
}
}
return null;
}