• 代码随想录算法训练营第十七天 | 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

  • 相关阅读:
    【CSDN|每日一练】硬币划分
    [附源码]java毕业设计基于Java烟支信息管理系统
    从0开始编写BP,附加动量因子的BP神经网络,不使用MATLAB工具箱,纯手写matlab代码,以BP分类为例...
    基于真理和逻辑之后的行动:年少轻狂、中年压力、老年迟疑
    水平垂直居中 方法 和兼容
    Rust 学习笔记
    Java中JVM虚拟机详解
    使用MicroApp重构旧项目
    Spring Kafka——基于 Spring Kafka 实现动态管理 Kafka 连接和 topic 的监听
    正则表达式
  • 原文地址:https://blog.csdn.net/weixin_42542290/article/details/127812945