57.二叉樹的下一個結點

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點而且返回。注意,樹中的結點不只包含左右子結點,同時包含指向父結點的指針。

題目解答

/*
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==null){
            return pNode;
        }
        
        //1.pNode有右子樹->pNode.right的最左節點
        if(pNode.right!=null){
            pNode=pNode.right;
            while(pNode.left!=null)
                pNode=pNode.left;
            return pNode;
        }
        
        while(pNode.next!=null){
            //2.pNode沒有右子樹,pNode是父節點的左子節點->父親節點
            if(pNode.next.left==pNode)
                return pNode.next;
            //3.pNode沒有右子樹,pNode是父節點的右子節點->父親節點的下一個節點
            pNode=pNode.next;
        }
        
        //4.沒有下一個節點
        return null;
    }
}
相關文章
相關標籤/搜索