【LeetCode】对称二叉树 平衡二叉树

 对称二叉树

即先判断根节点的左右子树相不相同,相同时,再判断左孩子的左子树和右孩子的右子树比较,左孩子的右子树和右孩子的左子树(当两个都相同时才是对称的).....依次递推,过程中并设置一些不满足相同的条件。

 算法代码

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root == null) return true; //由于此题至少有一个根节点,可写可不写
        return isSymmetricChild(root.left,root.right);
    }

    public static boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){
        if(leftTree==null && rightTree==null) return true;  //两个都为空
        if(leftTree!=null && rightTree==null || leftTree==null && rightTree!=null) return false; //一个为空一个不为空
        if(leftTree.val != rightTree.val) return false;  //值不相同
       
        /*
        boolean left = isduicheng(leftTree.left,rightTree.right);
        boolean right = isduicheng(leftTree.right,rightTree.left);
        return left&&right;
        */

        return isSymmetricChild(leftTree.left,rightTree.right) && isSymmetricChild(leftTree.right,rightTree.left);//和上面注释的作用一样

    }
}

 平衡二叉树

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

该题的实质还是求树的高度,只要你会写求树的高度的函数代码,那基本上就没问题了,由于我们在求树的高度的时候,是从最下面往上不断的返回当前子树的左右子树高度的最大值+1,最终得到根节点的高度,也就是该树的高度。那么我们可以对求数的高度的函数进行一些改变,当每次求得当前子根节点的左右子树的高度时,进行绝对值求差值,差值小于等于1,则说明当前子根是平衡的,,接着遍历。若差值大于1,说明当前子根已经不平衡了,就不用在往下遍历了,可节省一定的时间消耗。

 

算法代码

class Solution {
    public boolean isBalanced(TreeNode root) {
        if(getHeight(root)==-1) return false;
        return true;
    }

    public static int getHeight(TreeNode root){  //求树的高度的函数
        if(root == null) return 0;
        int leftHeight = getHeight(root.left);
        int rightHeight = getHeight(root.right);

        if(leftHeight<0 || rightHeight<0) return -1; 
        if(Math.abs(leftHeight-rightHeight)>1) return -1; //说明树不平衡了

        return leftHeight>rightHeight?leftHeight+1:rightHeight+1; //返回当前根的最大深度即高度

    }
}

猜你喜欢

转载自blog.csdn.net/m0_73381672/article/details/132099382
今日推荐