题目描述
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
平衡二叉树
解题思路
首先我们从根节点出发,要是它的左子树的高度和右子树的高度差距大于1,那么就返回false,不是的话就依次往下遍历,比如,遍历树的左子树,递归的方式,将整个树遍历完成。这里还需要写一个求树高度的方法,方便调用。
代码展示
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
int leftH = getHight(root.left);
int rightH = getHight(root.right);
if(leftH-rightH>1 || leftH-rightH<-1){
return false;
}
return isBalanced(root.left) && isBalanced(root.right);
}
public int getHight(TreeNode root){
if(root == null){
return 0;
}
int leftH = getHight(root.left);
int rightH = getHight(root.right);
return 1+(leftH>rightH? leftH:rightH);
}
}
题目描述
给定一个二叉树,检查它是否是镜像对称的。如下这个树就是对称的
对称二叉树
解题思路
首先若是为空树的话,直接返回真,接着就判断,这棵树的左右子树,可以看到,这里写了两个方法,一个就是镜像比较方法,这里就把左右子树作为参数,传入,进行判断,这里的核心就是,左子树的左孩子等于右子树的右孩子,左孩子的右孩子等于右子树的左孩子,当然这里也有,节点值不相等的情况,也要返回false;
代码展示
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
return isMirror(root.left,root.right);
}
public boolean isMirror(TreeNode q,TreeNode p){
if(q == null && p == null){
return true;
}
if(q == null || p == null){
return false;
}
if(p.val != q.val){
return false;
}
return isMirror(q.left,p.right) && isMirror(q.right,p.left);
}
}