判斷是否為平衡二叉樹
阿新 • • 發佈:2018-07-08
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; }
判斷是否為平衡二叉樹