代码随想录day14 Java版 二叉树部分

本文讨论了在解决二叉树题目时遇到的几种常见问题,如翻转二叉树的递归实现、对称二叉树的判断方法以及最大深度和最小深度的计算,强调了Java中值传递的影响和特殊情况的处理。
摘要由CSDN通过智能技术生成

今天开始刷二叉树的题目,发现大多数都是在昨天的遍历的基础上的变式

226.翻转二叉树

根据题目描述模拟整个交换过程,发现非常像前序遍历的递归方式:每次先将当前节点的左右孩子互换,再递归左右孩子,当节点为空的时候停下。(实际上看了题解发现除了中序遍历先处理了左边,回到中间节点时将左右颠倒了,之后处理“右边”部分相当于把左边转了回来。可以把处理完中间节点的代码改成依然处理左边)

我最开始在写题的时候将交换功能单独写了个函数swap,但测试发现根本没更改节点,查资料发现Java函数只有值传递,所以交换的都是传入参数的副本。因此交换的代码需要写在递归函数里面。

class Solution {
    public TreeNode invertTree(TreeNode root) {
        invert(root);
        return root;
    }
    void invert(TreeNode node) {
        if (node == null) return;
        TreeNode tmp = node.left;
        node.left = node.right;
        node.right = tmp;
        invert(node.left);
        invert(node.right);
    }  
}

101. 对称二叉树

发现本质是判断两个子树的内侧节点和外侧节点值是否相等,这种递归就需要两个参数,套路是从第二层开始找规律。这题的递归结束条件是对称两侧都为空,boolean返回值需要处理两个结束条件

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return is(root.left,root.right);
    }
    public boolean is(TreeNode left,TreeNode right){
        if(left==null && right==null) return true;
        if(left==null || right==null) return false;
        return left.val==right.val && is(left.left,right.right) && is(left.right,right.left);
    }
}

104.二叉树的最大深度

比较简单,递归条件为节点为空,每次进入递归+1

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

111.二叉树的最小深度

本来以为跟上面一题一样,测试用例一看发现如果出现节点一边没有孩子的情况会误判

因此需要额外判断左右边是否直接空了,空了就返回另一侧+1

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

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值