ソードフィンガーオファーインタビュー質問55-2:バランス二分木

この質問についての私の最初の考えは、各ノードの左右のサブツリーをトラバースすることでしたが、そのような方法はn ^ 2の時間計算量を持っています。私はより良い方法を考えなかったので、答えを見ました。

 

 

回答方法:(https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/solution/mian-shi-ti-55-ii-ping-heng-er-cha-shu- cong-di-zhi /

注文後のトラバーサル、剪定

左右のサブツリーの差が2より大きい場合、-1を返します。この-1は枝刈りに使用され、すべての再帰を直接終了します。このように、真偽の判断は-1かどうかの判断になります。

rootがnullの場合、直接0を返します。これは、場所によって提供される深さが0であることを意味します。

ただし、この計算方法では、各ノードは上からではなく下から上に深さを取得しますが、問題解決には影響しません。

 

    public boolean isBalanced(TreeNode root) {
        return  recur(root)!=-1;
    }
    public int recur(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = recur(root.left);
        if(left == -1) return -1;
        int right = recur(root.right);
        if(right == -1) return -1;

        return Math.abs(left-right)<2?Math.max(left,right)+1:-1;
        
    }

 

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/qq_40473204/article/details/115006970