算法

二叉树基本算法

2020-10-25  本文已影响0人  小鱼嘻嘻

问题1

二叉树的高度

原理

代码

class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return Math.max(left,right)+1;
    }
}

注意事项

问题2

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

原理

代码

class Solution {
    public TreeNode mirrorTree(TreeNode root) {
        if(root==null){
            return null;
        }
        TreeNode newHead = new TreeNode(root.val);
        newHead.left = mirrorTree(root.right);
        newHead.right = mirrorTree(root.left);
        return newHead;
    }

    
}

注意事项

问题3

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

原理

代码

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return sysmetric(root.left,root.right);
    }

    private boolean sysmetric(TreeNode left,TreeNode right){
        if(left==null&&right==null){
            return true;
        }
        if(left==null||right==null){
            return false;
        }
        boolean isLeft = sysmetric(left.left,right.right);
        boolean isRight = sysmetric(left.right,right.left);
        return left.val==right.val&&isLeft&&isRight;
    }


}

注意事项

问题4

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

原理

代码

class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if(t1==null){
            return t2;
        }
        if(t2==null){
            return t1;
        }
        TreeNode newRoot = new TreeNode(t1.val+t2.val);
        newRoot.left = mergeTrees(t1.left,t2.left);
        newRoot.right = mergeTrees(t1.right,t2.right);
        return newRoot;
    }
}

注意事项

上一篇 下一篇

猜你喜欢

热点阅读