版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012429555/article/details/89480917
关于这一道题我没想到还蛮难的
思路就是双递归去完成
第一个解决高度差,左右子树的高度差如何求解?对这就是求一个树的深度,一个树的深度怎么求?
遍历呀,怎么遍历,随便一个遍历算法就行啊,用递归求啊!
public int IsBalanced_Solution_1(TreeNode root) {
if(root==null) {
return 0;
}
int left=IsBalanced_Solution_1(root.left);
int right=IsBalanced_Solution_1(root.right);
return Math.max(left, right)+1;
}
一个树是由很多小树构成,求得一个树的深度,
之后,那我们求左右子树的深度,然后递归求相差值。怎么求每个子树的相差值?递归求呀!
如果相差的绝对值大于1,那就直接返回false;如果一直是true,则最后左右子树,返回true喽
public boolean IsBalanced_Solution(TreeNode root) {
if (root==null) {
return true;
}
int left_num=IsBalanced_Solution_1(root.left);
int right_num=IsBalanced_Solution_1(root.right);
if (Math.abs(left_num-right_num)>1) {
return false;
}
boolean left=IsBalanced_Solution(root.left);
boolean right=IsBalanced_Solution(root.right);
return left&&right;
}
整个程序如下:
package Chap2;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class IsBalanced_Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if (root==null) {
return true;
}
int left_num=IsBalanced_Solution_1(root.left);
int right_num=IsBalanced_Solution_1(root.right);
if (Math.abs(left_num-right_num)>1) {
return false;
}
boolean left=IsBalanced_Solution(root.left);
boolean right=IsBalanced_Solution(root.right);
return left&&right;
}
public int IsBalanced_Solution_1(TreeNode root) {
if(root==null) {
return 0;
}
int left=IsBalanced_Solution_1(root.left);
int right=IsBalanced_Solution_1(root.right);
return Math.max(left, right)+1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}