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;
        }
    }
  • 相关阅读:
    2020/5/18 BUU_ [GWCTF 2019]xxor
    2020/5/17 BUU_[BJDCTF2020]BJD hamburger competition
    2020/5/17 BUU_[BJDCTF2020]easy
    2020/5/16 BUU_ [ACTF新生赛2020]easyre
    2020.5.16 15:06
    由一道逆向题而引发,IDA调试ELF文件
    【攻防世界】对于parallel-comparator-200的理解的感想
    『攻防世界』:新手区 | when_did_you_born
    『攻防世界』:新手区 | guess number
    『攻防世界』:新手区 | level3
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14180983.html
Copyright © 2011-2022 走看看