代码随想录算法训练营Day14 | 257. 二叉树的所有路径、110.平衡二叉树、404.左叶子之和
2023-12-29 22:50:55
    		LeetCode 257 二叉树的所有路径

 本题思路:利用前序遍历的思想。用递归来解决。
- 首先找到递归的出口:如果该节点的左右孩子为空,说明已经到了叶子节点,那么就保存这条路径上的所有元素。然后添加到总结果中
- 如果左孩子不为空,就把当左孩子上的往左走的路径全部保存,保存完后, 节点回溯到这个左孩子上
- 如果右孩子不为空。再把右孩子上的往右走的路径全部保存,保存完后,节点回溯到这个右孩子上。
class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res = new LinkedList();
        if(root == null){
            return res;
        }
        List<Integer> paths = new LinkedList();
        travel(root,paths,res);
        return res;
    }
    public void travel(TreeNode root, List<Integer> paths, List<String> res){
        // 先把根节点放入Paths中
        paths.add(root.val);
        if(root.left == null && root.right == null){
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < paths.size() - 1; i++){
                sb.append(paths.get(i) + "->");
            }
            sb.append(paths.get(paths.size() - 1));
            res.add(sb.toString());
            return;
        }
        if(root.left != null){
           travel(root.left,paths,res);
           paths.remove(paths.size()-1); 
        }
        if(root.right != null){
           travel(root.right,paths,res);
           paths.remove(paths.size()-1); 
        }
    }
}
LeetCode 110 平衡二叉树

 本题思路: 递归思想。
- 先找出口,root == null,返回 true。
- ①先以根节点分为左右子树,如果左子树和右子树高度差绝对值小于1,说明左右子树平衡
- ②然后再递归判断,左孩子为根节点的左右子树是否平衡。
- ③然后再递归判断 ,右孩子为根节点的左右子树是否平衡
- 最后如果①②③都为true,说明平衡
class Solution {
    public boolean isBalanced(TreeNode root) {
        if(root == null){
            return true;
        }
        int l  = height(root.left);
        int r = height(root.right);
        boolean res = Math.abs(l-r)<=1?true:false;
        boolean left = isBalanced(root.left);
        boolean right = isBalanced(root.right);
        return res && left && right;
    }
    public int height(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = height(root.left);
        int right = height(root.right);
        return Math.max(left,right) + 1;
    }
}
LeetCode 404 左叶子之和

 本题思路: 递归思想
- 先找到出口 root == null,返回 0
- ①单层判断逻辑:该节点的左孩子不为空,并且该节点的左孩子的左右孩子都为空,就 记录 root.left.val 值
- ②然后递归遍历 root 的左子树得到和
- ③然后递归遍历 root 的右子树得到和
- 最后累加 ①②③
class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if(root == null){
            return 0;
        }
        //  用来记录当前节点的直接左叶子节点的值
        int res = (root.left != null && root.left.left == null && root.left.right == null) == true?root.left.val:0;
        int l = sumOfLeftLeaves(root.left);
        int r = sumOfLeftLeaves(root.right);
        return l + r + res;
    }
}
    			文章来源:https://blog.csdn.net/hero_jy/article/details/135298183
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!