zoukankan      html  css  js  c++  java
  • LeetCode129. 求根到叶子节点数字之和

    最笨的方法可以先求出所有的路径,然后转换成对应的数字,最后求和。但是时间效率很差(耗时3ms)

    ☆☆☆方法1:DFS

    方法2:BFS

    代码1:DFS(耗时0ms)

    class Solution {
        public int sumNumbers(TreeNode root) {
            return dfs(root, 0);
        }
        // temp表示上一层所有节点的和
        private int dfs(TreeNode root, int temp) {
            if (root == null) return 0;
            int sum = 10 * temp + root.val;  // 当前节点的值就是父节点的值*10+当前节点的值
            if (root.left == null && root.right == null) {
                return sum;
            }
            return dfs(root.left, sum) + dfs(root.right, sum);
        }
    }
    class Solution {
        int sum;
        public int sumNumbers(TreeNode root) {
            dfs(root, 0);
            return sum;
        }
        private void dfs(TreeNode root, int temp) {
            if (root == null) return;
            if (root.left == null && root.right == null) {
                sum += 10 * temp + root.val;
            }
            dfs(root.left, 10 * temp + root.val);
            dfs(root.right, 10 * temp + root.val);
        }
    }

    代码2:BFS(耗时1ms)

    class Solution {
        public int sumNumbers(TreeNode root) {
            int sum = 0;
            if (root == null) return sum;
            //维护两个队列,分别存储节点和节点对应的数字。
            Queue<TreeNode> nodeQueue = new LinkedList<>();
            Queue<Integer> numQueue = new LinkedList<>();
            nodeQueue.offer(root);
            numQueue.offer(root.val);
            while (!nodeQueue.isEmpty()) {
                TreeNode cur = nodeQueue.poll();
                int num = numQueue.poll();
    
                if (cur.left == null && cur.right == null) {
                    sum += num;
                }
                if (cur.left != null) {
                    nodeQueue.offer(cur.left);
                    numQueue.offer(num * 10 + cur.left.val);
                }
                if (cur.right != null) {
                    nodeQueue.offer(cur.right);
                    numQueue.offer(num * 10 + cur.right.val);
                }
            }
            return sum;
        }
    }
  • 相关阅读:
    struts1与struts2的防止表单重复提交
    JSTL 笔记
    fiddler的columns添加HTTPMethod
    兼容性测试技巧
    测试基础知识总结
    测试用例的书写方式及测试模板大全【转】
    软件测试的方法分类
    解决vue不支持promise语法问题
    vue-router 导航守卫
    e.target与事件委托简例【转】
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14180983.html
Copyright © 2011-2022 走看看