题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解题思路:
当右子树不为空时,返回右子树最左叶节点即可;当右子树为空时,若节点的根节点,返回null,若不为根节点且该节点为父节点的左子树,则返回父节点,若不为根节点且该节点为父节点的右子树,考虑在找父节点的过程中自否出现该节点是父节点的左子树,如果出现则返回根节点,否则返回null。
代码(java):
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if(pNode.right==null){
if(pNode.next==null)return null;
if(pNode==pNode.next.left)return pNode.next;
else if(pNode==pNode.next.right){
TreeLinkNode next=pNode.next;
boolean flag=false;
while(next.next!=null){
if(next==next.next.left)flag=true;
next=next.next;
}
return flag ? next : null;
}
}
else if(pNode.right!=null){
TreeLinkNode right=pNode.right;
while(right.left!=null){
right=right.left;
}
return right;
}
return null;
}
}