劍指offerNo39 . 平衡二叉樹(Java)

題目描述:

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

平衡二叉樹具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,

思路:

我們利用求二叉樹的高度的函數,分別求出左右二叉樹的高度,二者只差<=1,則是平衡二叉樹。

代碼:

package offer01;

public class TestNo39 {
    static class TreeNode{
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
        TreeNode(int val){
            this.val = val;
        }
    }
    public static void main(String[] args) {
        TreeNode root = new TreeNode(0);
        TreeNode node1 = new TreeNode(3);
        TreeNode node2 = new TreeNode(4);
        root.left = node1;
        root.right = node2;
        System.out.println(new TestNo39().IsBalanced_Solution(root));
    }
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null)
            return  true;
        //求出左子樹的高度
        int left = depth(root.left);
        //求出右子樹的高度
        int right =depth(root.right);
        //求左右子樹高度的差值
        int Dapth = Math.abs(left-right);
        return Dapth>1 ? false:true;
    }
    //遞歸求左右子樹的高度
    private int depth(TreeNode pRootOfTree){
        if(pRootOfTree == null)
            return 0;
        int lDepth = depth(pRootOfTree.left);
        int rDepth = depth(pRootOfTree.right);
        return lDepth>rDepth ?(lDepth+1):(rDepth+1);
    }
}

 

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