Leetcode—— 求根节点到叶节点数字之和

Posted Yawn,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode—— 求根节点到叶节点数字之和相关的知识,希望对你有一定的参考价值。

1. 求根节点到叶节点数字之和

(1)DFS

  • 特例处理:root为空返回0
  • 递归从根节点开始,递归时包含两个参数,一个是当前节点node,一个是到当前节点为止的数字和num
  • 如果node的左节点存在,进入左节点的递归;如果node的右节点存在,进入右节点的递归
  • 如果node的左节点和右节点都不存在,也就是当前节点是叶子节点,把num加到结果中
  • 返回res
class Solution {
    int res;
    public int sumNumbers(TreeNode root) {
        if (root == null) {
            return 0;
        }
        dfs(root, root.val);
        return res;
    }

    public void dfs(TreeNode node, int num){
        if (node.left == null && node.right == null) {
            res += num;
            return;
        }
        if (node.left != null) {
            dfs(node.left, num * 10 + node.left.val);
        }
        if (node.right != null) {
            dfs(node.right, num * 10 + node.right.val);
        }
    }
}

(2)BFS

  • 特例处理:若root为空返回0
  • 用队列存储节点node和当前节点对应的数字和num
  • 只要队列非空进入循环:
    i. 队列元素出队,记录node和num
    ii. 如果当前节点是叶子节点,res += num
    iii. 如果当前节点的左子节点存在,该子节点和加上该子节点值的数字和入队
    iv. 如果当前节点的右子节点存在,该子节点和加上该子节点值的数字和入队
  • 返回res
class Solution {
    public int sumNumbers(TreeNode root) {
        if (root == null) {
            return 0;
        }
        Queue<TreeNode> queueNode = new LinkedList<>();
        Queue<Integer> queueNum = new LinkedList<>();
        queueNode.offer(root);
        queueNum.offer(root.val);
        int res = 0;
        while (!queueNode.isEmpty()) {
            TreeNode node = queueNode.poll();
            int num = queueNum.poll();
            if (node.left == null && node.right == null) {
                res += num;
            }
            if (node.left != null){
                queueNode.offer(node.left);
                queueNum.offer(num * 10 + node.left.val);
            }
            if (node.right != null) {
                queueNode.offer(node.right);
                queueNum.offer(num * 10 + node.right.val);
            }
        }
        return res;
    }
}

以上是关于Leetcode—— 求根节点到叶节点数字之和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第129题—求根节点到叶节点数字之和—Python实现

Leetcode No.129 求根节点到叶节点数字之和

LeetCode Algorithm 129. 求根节点到叶节点数字之和

LeetCode Algorithm 129. 求根节点到叶节点数字之和

Leetcode—— 求根节点到叶节点数字之和

129. 求根节点到叶节点数字之和