平衡二叉樹 【leetcode - 110 - 簡單】

文章優先發表在個人博客

http://www.xdx97.com/#/single?bid=055ce49b-feb8-6848-0811-e9f9267e52f7

 

    胡扯:這個題做的時間還是比較長的,雖然只是一個簡單題。不過在做的過程中一直覺得自己可以做出來的。哈哈,最後代碼不是很好,只打敗百分之36的人,這也是想到的,畢竟寫了兩次DFS和遞歸,代碼不慢纔怪,但是比較好理解。

思路:

    1、日常非空判斷。

    2、先前序遍歷每一個節點 三種遍歷

    3、在每一個節點的時候,再去遍歷以它爲根節點的左右長度。

    4、比較它的左右長度,看看是否相差1,如果不是立馬終止程序,返回false

 

代碼:代碼中有一句註釋,你可以打開,上面標識着每一個節點的左右長度

class Solution {
    
    boolean flag = true;
    int max = 0;
    void Preorder (TreeNode root){
        max = 0;
        dfs(root.left,1);
        int tem = max;
        max = 0;
        dfs(root.right,1);
        // System.out.println(root.val + " : " + tem + " "+max);
        if (Math.abs(tem - max) > 1){
            flag = false;
            return;
        }

        if( root.left != null )
            Preorder(root.left);
        if( root.right != null )
            Preorder(root.right);
    }

    void dfs (TreeNode root, int num){

        if (root == null)
            return;
        if (num > max)
            max = num;
        if( root.left != null )
            dfs(root.left,num + 1);
        if( root.right != null )
            dfs(root.right, num + 1);
    }
    
    public boolean isBalanced(TreeNode root) {
        if( root == null )
            return true;
        
        Preorder(root);
            
        return flag;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章