[8]オファーは安全性を証明する。次に、バイナリツリーノード

タイトル説明

バイナリツリーやサイトの1を考えると、どのように注文トラバーサルシーケンス内の次のノードを見つけるには?ツリーは、他の2つは左と右の子ポインタ、および親ノードを指すポインタを参照してくださいノード

public class Node {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode parent = null;

    Node(int val) {
        this.val = val;
    }
}

思考

  1. 右のサブツリーを持っているとき左端ノードの右部分木の次のノード
  2. 親ノードを見つけるために時間のない右部分木ません。現在のノードの親ノードが子を残し?はい、親ノードに戻ります。、その後、見つからない親ノードが1つの親の左の子であるかどうかを判断するために、片方の親の親に見下ろし、それが直接の親ノードを返し保持しません...
public class GetNextNode {
    public static class Node{
        int val;
        Node left;
        Node right;
        Node parent;

        public Node(int data){
            this.val = data;
        }
    }

    public Node getNextNode(Node node){
        if(node == null) return null;

        // 有右子树
        if(node.right != null){
            while(node.left != null){
                node = node.left;
            }
            return node;
        }

        // 没有右子树
        while(node.parent != null){
            if(node.parent.left == node) return node.parent;
            node = node.parent;
        }
        return null;
    }
}


  1. リスト項目
公開された89元の記事 ウォン称賛13 ビュー20000 +

おすすめ

転載: blog.csdn.net/Dawn510/article/details/105259018