剑指offer 二叉树的下一个节点

题目描述:

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

解题思路:

当右子树不为空时,返回右子树最左叶节点即可;当右子树为空时,若节点的根节点,返回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;
    }
}

猜你喜欢

转载自blog.csdn.net/leo_weile/article/details/88734465