• 代码随想录算法训练营第十七天 | 110、257、404


    110. Balanced Binary Tree

    题目链接:https://leetcode.cn/problems/balanced-binary-tree/

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        public boolean isBalanced(TreeNode root) {
            if (root == null) return true;
            return getHeght(root) == -1 ? false : true;
        }
        public int getHeght(TreeNode node){
            if (node == null) return 0;
            int l = getHeght(node.left);
            if (l == -1) return -1;
            int r = getHeght(node.right);
            if (r == -1) return -1;
            else return Math.abs(l - r) > 1 ? -1 : 1 + Math.max(l, r);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    257. Binary Tree Paths

    题目链接:https://leetcode.cn/problems/binary-tree-paths/

    方法一 迭代

    1 方法思想

    2 代码实现

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        
        public List<String> binaryTreePaths(TreeNode root) {
                    List<String> ans = new ArrayList<>();
            if (root == null) return ans;
            Stack<TreeNode> stack = new Stack<>();
            Stack<String> path = new Stack<>();
            stack.push(root);
            path.push(String.valueOf(root.val));
    
            while (!stack.isEmpty()) {
                TreeNode node = stack.pop();
                String pathTemp = path.pop();
                if (node.right == null && node.left == null) {
                    ans.add(pathTemp);
                }
                if (node.right != null) {
                    stack.push(node.right);
                    path.add(String.valueOf(new StringBuffer(pathTemp).append("->").append(node.right.val)));
                }
                if (node.left != null) {
                    stack.push(node.left);
                    path.add(String.valueOf(new StringBuffer(pathTemp).append("->").append(node.left.val)));
                }
            }
            return ans;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    3 复杂度分析

    时间复杂度:
    空间复杂度:

    4 涉及到知识点

    方法二 递归

    1 方法思想

    2 代码实现

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        
         List<String> ans = new ArrayList<>();
    
        public List<String> binaryTreePaths(TreeNode root) {
    
            if (root == null) return ans;
            else {
                if (root.left != null) {
                    getPath(root.left, String.valueOf(root.val));
                }
                if (root.right != null) {
                    getPath(root.right, String.valueOf(root.val));
                }
                if (root.left == null && root.right == null)ans.add(String.valueOf(root.val));
            }
            return ans;
        }
    
        public void getPath(TreeNode node, String path) {
    
            String temPath = path + "->" + String.valueOf(node.val);
            if (node.left != null) {
                getPath(node.left, temPath);
            }
            if (node.right != null) {
                getPath(node.right, temPath);
            }
            if (node.left == null && node.right == null){
                ans.add(temPath);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    3 复杂度分析

    时间复杂度:
    空间复杂度:

    4 涉及到知识点

    收获和总结

    1.遇到的困难?

    2 收获

    学习链接

    https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF

    404. Sum of Left Leaves

    题目链接:https://leetcode.cn/problems/sum-of-left-leaves/

    方法一 递归

    1 方法思想

    2 代码实现

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        public int sumOfLeftLeaves(TreeNode root) {
            if (root == null) return 0;
            int mid = 0;
            int leftTree = sumOfLeftLeaves(root.left);
            int rightTree = sumOfLeftLeaves(root.right);
            if (root.left!=null && root.left.left == null && root.left.right == null){
                mid = root.left.val;
            }
            return leftTree + mid + rightTree;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3 复杂度分析

    时间复杂度:
    空间复杂度:

    4 涉及到知识点

    方法二 迭代

    1 方法思想

    2 代码实现

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        public int sumOfLeftLeaves(TreeNode root) {
            if (root == null) return 0;
            int mid = 0;
            int leftTree = sumOfLeftLeaves(root.left);
            int rightTree = sumOfLeftLeaves(root.right);
            if (root.left!=null && root.left.left == null && root.left.right == null){
                mid = root.left.val;
            }
            return leftTree + mid + rightTree;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3 复杂度分析

    时间复杂度:
    空间复杂度:

    4 涉及到知识点

    收获和总结

    1.遇到的困难?

    2 收获

    学习链接

    https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF

  • 相关阅读:
    logback的简单配置详解
    创新发展,科技制胜 | 云扩科技入选“2022中小企业智能化解决方案提供商TOP10”
    TikTok云手机可以运营多少个账号
    gym-retro 保存进度文件方法
    git 命令 简单介绍
    适合汽车音频系统的ADAU1977WBCPZ、ADAU1978WBCPZ、ADAU1979WBCPZ四通道 ADC,24-bit,音频
    梯度消失和梯度爆炸原理
    C语言练习百题之插入一个数
    001 linux 导学
    【机器学习】使用tensorflow 实现协同过滤算法
  • 原文地址:https://blog.csdn.net/weixin_42542290/article/details/127812945