LeetCode判断一个树为平衡二叉树 ,判断一个树为对称二叉树(详解)

题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值