59.次のノードバイナリツリー

件名の説明:

  前記ノードの指定されたバイナリツリーは、先行順走査順序とリターンの次のノードを見つけます。ツリー内のノードは、左と右の子ノードだけでなく、親ノードが指すポインタが含まれている含まれていることに注意してください。

アイデアの分析:

  次のノードのバイナリツリーは、次の状況の全

  1.バイナリツリーは空で、空に戻ります

  右の子ノードが存在2.ポインタが図の右の子に設定され、リーフノードは次のノードへのポインタが左の子ノードに沿っていることが見出されています。

  3.ノードは、親ノードの左の子ノード場合、親ノードは次のノードである、または裁判官が繰り返される前に、その親ノードの親ノードを上がるし続ける、ルートでない結果を返します。

コード:

/*
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 null;
        if(pNode.right!=null){    //右孩子不为空,从右孩子开始,沿着左指针遍历到叶子节点,即为下一个节点
            pNode=pNode.right;
            while(pNode.left!=null){
                pNode=pNode.left;
            }
            return pNode;
        }
        while(pNode.next!=null){    //pNode不为根节点
            TreeLinkNode parentNode=pNode.next;
            if(parentNode.left==pNode) //如果当前节点时父节点的左孩子,那么下一个节点就是父节点。
                return parentNode;
            pNode=pNode.next;
        }
        return null;
    }
}

おすすめ

転載: www.cnblogs.com/yjxyy/p/10961235.html