代码随想录算法训练营第十七天| 110. 平衡二叉树, 257. 二叉树的所有路径,404.左叶子之和

110. 经过昨天的苦难磨砺,今天似乎有点进步。这题要注意的是每个结点直接的高度差不能超过1,而不是只比较left和right的高度差!思路的话还是后序遍历,在遍历的时候要加个判断条件如果当前有节点的高度差超过1了则直接返回-1;

class Solution {
    public boolean isBalanced(TreeNode root) {
        return dfs(root) != -1; // 如果子树是平衡的,dfs返回的是高度;不平衡则返回-1
    }

    public int dfs(TreeNode root){
        if(root==null) return 0;

        int leftHeight = dfs(root.left);
        if(leftHeight == -1) return -1; // 左子树不平衡

        int rightHeight = dfs(root.right);
        if(rightHeight == -1) return -1; // 右子树不平衡

        
        if(Math.abs(leftHeight-rightHeight) > 1) return -1; // 当前节点不平衡

        return Math.max(leftHeight, rightHeight)+1; // 返回当前节点的高度
    }
}

257. 首先,感谢carl大佬的视频讲解才让我半懂的写出来这道题目🤣,有点难度兄弟们, 这是简单题?LeetCode:257. 二叉树的所有路径icon-default.png?t=N7T8https://www.bilibili.com/video/BV1ZG411G7Dh/?vd_source=8e2358f9b27440129acde1350d40c3cb

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res = new ArrayList<>();
        List<Integer> path = new ArrayList<>();

        dfs(root, res, path);
        return res;
    }

    public void dfs(TreeNode root, List<String> res, List<Integer> path){
        //前序遍历:中
        //中放在这里,是为了最后path中可以加入最后的叶子结点!
        //中放到了递归终止条件的前面,所以下面递归root时要检查是否为空
        path.add(root.val);

        //递归终止条件,到达叶子结点
        if(root.left==null && root.right==null){
            StringBuilder sb = new StringBuilder();
            //注意:这里只到path.size()-1,留出最后一个字符单独加入,不然最后会多加一个箭头“->”
            for(int i = 0; i < path.size()-1; i++){
                sb.append(path.get(i)).append("->");
            }
            sb.append(path.get(path.size()-1));//加入最后一个字符
            res.add(sb.toString()); // 加入一条路径
        }

        //左
        if(root.left != null){
            dfs(root.left, res, path);
            path.remove(path.size()-1); // 回溯

        }

        //右
        if(root.right != null){
            dfs(root.right, res, path);
            path.remove(path.size()-1); // 回溯

        }
    }

}

 404. 好晕,做不明白,给我做暴躁😡了真的烦。

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null) return 0;
        int leftValue = sumOfLeftLeaves(root.left);    // 左
        int rightValue = sumOfLeftLeaves(root.right);  // 右
                                                       
        int midValue = 0;
        if (root.left != null && root.left.left == null && root.left.right == null) { 
            midValue = root.left.val;
        }
        int sum = midValue + leftValue + rightValue;  // 中
        return sum;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值