前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode104|求根到叶子节点数字之和

LeetCode104|求根到叶子节点数字之和

作者头像
码农王同学
发布2020-10-27 18:11:40
3170
发布2020-10-27 18:11:40
举报
文章被收录于专栏:后端Coder

0x01,问题简述

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。

例如,从根到叶子节点路径 1->2->3 代表数字 123。

计算从根到叶子节点生成的所有数字之和。

说明: 叶子节点是指没有子节点的节点。

0x02,示例

代码语言:javascript
复制
示例 1:

输入: [1,2,3]
    1
   / \
  2   3
输出: 25
解释:
从根到叶子节点路径 1->2 代表数字 12.
从根到叶子节点路径 1->3 代表数字 13.
因此,数字总和 = 12 + 13 = 25.
示例 2:

输入: [4,9,0,5,1]
    4
   / \
  9   0
 / \
5   1
输出: 1026
解释:
从根到叶子节点路径 4->9->5 代表数字 495.
从根到叶子节点路径 4->9->1 代表数字 491.
从根到叶子节点路径 4->0 代表数字 40.
因此,数字总和 = 495 + 491 + 40 = 1026.

0x03,题解思路

递归思路进行求解

0x04,题解程序

代码语言:javascript
复制

import java.util.LinkedList;

public class SumNumbersTest2 {
    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(4);
        TreeNode t2 = new TreeNode(9);
        TreeNode t3 = new TreeNode(0);
        TreeNode t4 = new TreeNode(5);
        TreeNode t5 = new TreeNode(1);
        t1.left = t2;
        t1.right = t3;
        t2.left = t4;
        t2.right = t5;
        int sumNumbers = sumNumbers(t1);
        System.out.println("sumNumbers = " + sumNumbers);

    }

    public static int sumNumbers(TreeNode root) {
        if (root == null) {
            return 0;
        }
        LinkedList<TreeNode> queue = new LinkedList<>();
        LinkedList<Integer> path = new LinkedList<>();
        queue.add(root);
        path.add(root.val);
        int sum = 0;
        while (!queue.isEmpty()) {
            TreeNode node = queue.pollLast();
            Integer pollLast = path.pollLast();
            if (node.left == null && node.right == null) {
                sum += pollLast;
            }
            if (node.left != null) {
                queue.add(node.left);
                path.add(pollLast * 10 + node.left.val);
            }
            if (node.right != null) {
                queue.add(node.right);
                path.add(pollLast * 10 + node.right.val);
            }
        }
        return sum;
    }
}

0x05,题解程序图片版

0x06,总结一下

对于树结构,理解最基本的前序遍历,中序遍历是基本的,这道题自己本来想着利用利用递归的思路进行解决,写着写着想着利用队列的特性进行解决一下,就这样利用队列的数据结构来解决了,这里给下使用递归的方式进行解决的程序

代码语言:javascript
复制

import java.util.LinkedList;

public class SumNumbersTest2 {
    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(4);
        TreeNode t2 = new TreeNode(9);
        TreeNode t3 = new TreeNode(0);
        TreeNode t4 = new TreeNode(5);
        TreeNode t5 = new TreeNode(1);
        t1.left = t2;
        t1.right = t3;
        t2.left = t4;
        t2.right = t5;
        int sumNumbers = sumNumbers2(t1);
        System.out.println("sumNumbers = " + sumNumbers);

    }


    private static int sum = 0;

    public static int sumNumbers2(TreeNode root) {
        if (root == null) {
            return 0;
        }
        dfs(root, 0);
        return sum;
    }

    private static void dfs(TreeNode root, int father) {
        if (root == null) {
            return;
        }
        int cur = father * 10 + root.val;
        if (root.left == null && root.right == null) {
            sum += cur;
        }
        dfs(root.left, cur);
        dfs(root.right, cur);
    }
}

递归结构题解程序图片版

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档