代码随想录打卡Day12:

Leetcode 226

题目链接:翻转二叉树
就是遍历每一个节点,交换每一个节点的左右节点就可以。只需要注意不可以使用中序遍历

    public TreeNode invertTree(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        if(root != null) queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode cur = queue.poll();
            if(cur!=null) {
                TreeNode temp = cur.left;
                cur.left = cur.right;
                cur.right = temp;
                queue.offer(cur.left);
                queue.offer(cur.right);
            }
        }
        return root;
    }

Leetcode 101

题目链接:对称二叉树

一些思维定式需要克服,如果递归之传入一个cur节点,那么递归cur节点的左右是肯定无法做到同时在一个函数的栈中递归到最左叶子节点和最右叶子节点的;但是传入两个节点left和right,分别递归left的left节点,right的right节点就可以做到

初步的思路就是用数组保存中序遍历的结果,然后检查这个数组是不是回文,但是这种思路无法过全部的测试
例如如下样例:


不能通过的测试

按照初步思路结果为true,但是正确答案应该为false
正确思路还是要通过结构来判断

//递归方法
    public boolean Compare(TreeNode left, TreeNode right){
        if(left==null&&right==null) return true;
        else if(left==null&&right!=null) return false;
        else if(left!=null&&right==null) return false;
        else if(left.val!=right.val) return false;

        return Compare(left.left, right.right)&&Compare(left.right, right.left);
    }
    public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        else return Compare(root.left, root.right); 
    }

// 非递归方法如下
    public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root.left);
        queue.offer(root.right);
        while(!queue.isEmpty()){
            TreeNode left = queue.poll();
            TreeNode right = queue.poll();

            if(left==null&&right==null) continue;
            if(left==null||right==null||left.val!=right.val) return false;

            queue.offer(left.left);
            queue.offer(right.right);
            queue.offer(left.right);
            queue.offer(right.left);
        }
        return true;
    }

Leetcode 104

题目链接:二叉树的最大深度

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

Leetcode 111

题目链接:二叉树的最小深度
注意题干中的叶子节点,比最大深度需要更多的判断条件!

    public int minDepth(TreeNode root) {
        if(root==null) return 0;
        int left = minDepth(root.left);
        int right = minDepth(root.right);
        // 判断是否为叶子节点
        // 当一个左子树为空,右不为空,这时并不是最低点
        if (root.left == null && root.right != null) { 
            return 1 + right;
        }   
        // 当一个右子树为空,左不为空,这时并不是最低点
        if (root.left != null && root.right == null) { 
            return 1 + left;
        }
        int result = 1 + Math.min(left, right);
        return result;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容