其他分享
首页 > 其他分享> > 二叉数的一些练习

二叉数的一些练习

作者:互联网

110. 平衡二叉树

点击跳转题目

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

class Solution {
    public int getHeight(TreeNode root){
        //判空
        if(root == null) return 0;
        //不为空:左树的高度+右树的高度 + 1(根)
        return Math.max(getHeight(root.left),getHeight(root.right))+1;

    }
    public boolean isBalanced(TreeNode root) {
        //判空
        if(root == null) return true;
        //左子树高度  右子树高度  之差 <= 1   -----》  才能继续再判断这个节点下的左右子树是否平衡
        if(Math.abs(getHeight(root.left)-getHeight(root.right))<=1){
            return isBalanced(root.left)&&isBalanced(root.right);
        }else {
            return false;
        }
        

    }
}
//时间复杂度O(n)
class Solution {
    public int getHeight(TreeNode root){
        if(root == null) return 0;
        int leftHeight = getHeight(root.left);
        int rightHeight = getHeight(root.right);
        // if(leftHeight >= 0 && rightHeight >= 0 &&  //当根节点两边都为空时,会返回-1,所以添加限定条件
        // Math.abs(leftHeight-rightHeight) <= 1) {
        //     return Math.max(leftHeight,rightHeight) + 1;
        // }else {
        //     return -1;
        // }
        if(leftHeight == -1 || rightHeight == -1 || //当根节点两边都为空时,会返回-1
        Math.abs(leftHeight-rightHeight) > 1) {
           return -1;
        }else {
             return Math.max(leftHeight,rightHeight) + 1;
        }

    }
    public boolean isBalanced(TreeNode root) {
        if(getHeight(root) >= 0) {
            return true;
        }
        return false;
    }
}

101. 对称二叉树

点击跳转题目

给定一个二叉树,检查它是否是镜像对称的。

//判断左子树和右子树对称
 //左子树的左 == 右子树的右  &&   左子树的右==右子树的左
class Solution {
    public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){
        //一个为空一个不为空的情况
        if((leftTree==null && rightTree!=null )||(leftTree!=null && rightTree==null)){
            return false;
        }
        //两个都为空
        if(leftTree==null && rightTree==null) return true;
        //两个都不为空
        //(1)值是否相等----不等的情况
        if(leftTree.val != rightTree.val){
            return false;
        }
        //(1)值是否相等----相等的情况 

        return (isSymmetricChild(leftTree.left,rightTree.right))&&
                (isSymmetricChild(leftTree.right,rightTree.left));
    }
    public boolean isSymmetric(TreeNode root) {
        //1.判空
        if(root == null) return true;
        //2.判断左子树和右子树对称
        return isSymmetricChild(root.left,root.right);



    }
}

标签:rightTree,return,练习,二叉,二叉树,&&,一些,null,root
来源: https://blog.csdn.net/qq_45915957/article/details/113272074