*平衡二叉树
题目
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
分析
延续上一道题二叉树深度的思路,如果发现节点左子树的高度和右子树高度之差大于1,则不满足题目要求,返回-1,一直递归返回-1,最后判断返回值是否为-1,为-1返回false,其余情况返回true。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
int i = f(root);
if(i == -1) return false;
return true;
}
int f(TreeNode root){
if(root == null) return 0;
int left = f(root.left);
if(left == -1)return -1;
int right = f(root.right);
if(right == -1)return -1;
if(Math.abs(left-right)>1) return -1;
return Math.max(left,right)+1;
}
}
用flag记录状态思路更简单。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
boolean flag = true;
public boolean isBalanced(TreeNode root) {
int depth = 0;
int result = dfs(root);
return flag;
}
int dfs(TreeNode root){
if(root == null){
return 0;
}
int left = dfs(root.left);
int right=dfs(root.right);
if(Math.abs(left-right)>1){
flag = false;
}
return Math.max(left,right)+1;
}
}
版权声明:本文为Jiaodaqiaobiluo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。