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

  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);
    }
复制代码

 

posted @   牛有肉  阅读(168)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示