美文网首页算法
二叉树基本算法

二叉树基本算法

作者: 小鱼嘻嘻 | 来源:发表于2020-10-25 13:07 被阅读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;
        }
    }
    

    注意事项

    • 左侧的高度+右侧的高度之后需要+1,+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

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

    原理

    • 对称二叉树的定义:左边的二叉树是右边的二叉树的镜像
    • 因此有left.left==right.right&&left.right==right.left
    • 空二叉树为对称二叉树

    代码

    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;
        }
    
    
    }
    

    注意事项

    • 空树为对称二叉树
    • left==null&&right==null 为对称二叉树,left==null||right==null为非对称二叉树

    问题4

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

    原理

    • 创建一个新的二叉树,当前节点为t1.val和t2.val之和
    • 新二叉树的左子树为,t1的左子树和t2的左子树,新二叉树的右子树为,t1的右子树和t2的右子树
    • 递归整个过程

    代码

    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;
        }
    }
    

    注意事项

    • 暂无

    相关文章

      网友评论

        本文标题:二叉树基本算法

        本文链接:https://www.haomeiwen.com/subject/ekogmktx.html