1. 程式人生 > >判斷是否為平衡二叉樹

判斷是否為平衡二叉樹

code 全局變量 bool 得到 身高 static lock 左右子樹 node

問題描述:

給定一個二叉樹,判斷它是否是高度平衡的二叉樹。

本題中,一棵高度平衡二叉樹定義為:

一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。

示例 1:

給定二叉樹 [3,9,20,null,null,15,7]

    3
   /   9  20
    /     15   7

返回 true

示例 2:

給定二叉樹 [1,2,2,3,3,null,null,4,4]

       1
      /      2   2
    /    3   3
  /  4   4

返回 false

解決思路:

計算二叉樹中每個節點左子樹與右子樹的高度,比較二者差的絕對值是否不超過2。

當二叉樹中所有的節點都滿足上述要求,則該樹為平衡二叉樹,否則不是。

實現代碼:

    // 全局變量記錄是否為平衡二叉樹的判斷結果
    private static boolean res = true;


    // 計算高度
    private static int height(TreeNode node) {

        // res為false,已知該樹不是BST,盡快返回
        // node為空,高度為0
        if (!res || node == null) return 0;
        // node左右均為空,返回高度1
        if
(node.left==null && node.right==null) return 1; // 得到node左右子樹的高度 int left = height(node.left); int right = height(node.right); // 判斷是否滿足BST的要求 if (left-right>1 || right-left>1) res = false; // node的高度為左右子樹高度最大的那個加1(自身高度為1) return Math.max(left, right)+1; }
public static boolean isBalanced(TreeNode root) { height(root); return res; }

判斷是否為平衡二叉樹