平衡二叉樹
阿新 • • 發佈:2020-08-20
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
一個二叉樹每個節點的左右兩個子樹的高度差的絕對值不超過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
演算法流程: recur(root): 遞迴返回值: 當節點root 左/ 右子樹的高度差 < 2 :則返回以節點root為根節點的子樹的最大高度,即節點 root 的左右子樹中最大高度加 11 ( max(left, right) + 1 ); 當節點root 左 / 右子樹的高度差 ≥2 :則返回 −1 ,代表 此子樹不是平衡樹 。 遞迴終止條件: 當越過葉子節點時,返回高度 0 ; 當左(右)子樹高度 left== -1 時,代表此子樹的 左(右)子樹 不是平衡樹,因此直接返回 -1 ; isBalanced(root) : 返回值: 若 recur(root) != 1 ,則說明此樹平衡,返回 true ; 否則返回 false
1/** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public boolean isBalanced(TreeNode root) { 12 return recur(root) != -1;13 } 14 15 int recur(TreeNode root){ 16 if(root==null){ 17 return 0; 18 } 19 int le = recur(root.left); 20 if(le == -1){ 21 return -1; 22 } 23 int ri = recur(root.right); 24 if(ri == -1){ 25 return -1; 26 } 27 return Math.abs(le-ri) < 2 ? Math.max(le,ri)+1 : -1; 28 } 29 }