/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/classSolution{publicbooleanisBalanced(TreeNode root){returnisBalancedTree(root)!=-1;}// 為平衡二叉樹,返回深度;否則返回-1intisBalancedTree(TreeNode root){// 空為平衡二叉樹if(root ==null){return0;}int left =isBalancedTree(root.left);int right =isBalancedTree(root.right);// 左子樹不是 || 右子樹不是 || 左右子樹不平衡if(left ==-1|| right ==-1|| left - right <-1|| left - right >1){return-1;}returnMath.max(left, right)+1;}}
無注釋版本
classSolution{publicbooleanisBalanced(TreeNode root){returnisBalancedTree(root)!=-1;}publicintisBalancedTree(TreeNode root){if(root ==null){return0;}int left =isBalancedTree(root.left);int right =isBalancedTree(root.right);if(left - right >1|| left - right <-1|| left ==-1|| right ==-1){return-1;}returnMath.max(left, right)+1;}}
二刷
好家伙,寫出了不一樣的寫法
classSolution{publicbooleanisBalanced(TreeNode root){if(root ==null){returntrue;}if(isBalanced(root.left)&&isBalanced(root.right)){int left =isBalancedTree(root.left);int right =isBalancedTree(root.right);int diff = left - right;return diff < 2 && diff >-2;}returnfalse;}intisBalancedTree(TreeNode root){if(root ==null){return0;}returnMath.max(isBalancedTree(root.left),isBalancedTree(root.right))+1;}}
還是這個簡潔點哇
classSolution{publicbooleanisBalanced(TreeNode root){returnisBalancedTree(root)!=-1;}intisBalancedTree(TreeNode root){if(root ==null){return0;}int left =isBalancedTree(root.left);int right =isBalancedTree(root.right);if(right - left >1|| right - left <-1|| left ==-1|| right ==-1){return-1;}returnMath.max(left, right)+1;}}