首页 > 其他 > 详细

Leetcode 129 求根到叶子节点数字之和 DFS优化

时间:2020-07-13 23:27:11      阅读:70      评论:0      收藏:0      [点我收藏+]

技术分享图片

  DFS 解法,通过回溯一个 StringBuilder 记录下所有路径代表的数字并求和:

    StringBuilder sb = new StringBuilder();
    int re = 0;

    public int sumNumbers(TreeNode root) {
        if (root == null) {
            return 0;
        }
        getNums(root);
        return re;
    }

    public void getNums(TreeNode root) {
        if (root.right == null && root.left == null) {
            sb.append(root.val);
            Integer num = Integer.valueOf(sb.toString());
            re += num;
            sb.deleteCharAt(sb.length() - 1);
            return;
        }
        sb.append(root.val);
        if (root.left != null) {
            getNums(root.left);
        }
        if (root.right != null) {
            getNums(root.right);
        }
        sb.deleteCharAt(sb.length() - 1);
    }

  本着上面的思路,进行 DFS 表示的优化。只考虑单个节点可能遇到的情况:

  1、为叶子节点,直接返回该节点的值

  2、存在子节点,返回当前节点乘10分别加左右子节点并求和

    public final int sumNumbers0(TreeNode root) {
        return getNums(root, 0);
    }

    public final int getNums(TreeNode root, int preSum) {
        if (root == null) {
            return 0;
        }
        int sum = preSum * 10 + root.val;
        if (root.left == null && root.right == null) {
            return sum;
        }
        return getNums(root.right, sum) + getNums(root.left, sum);
    }

技术分享图片

 

Leetcode 129 求根到叶子节点数字之和 DFS优化

原文:https://www.cnblogs.com/niuyourou/p/13296362.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!