129. 求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
该题目考的知识点是二叉树的广度优先遍历和深度优先遍历的使用,采用C++实现的广度优先遍历代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int sumNumbers(TreeNode* root) {
if(!root) return 0;
int result=0;
queue<TreeNode*> NodeQueue;
queue<int> NumQueue;
TreeNode* Node=root;
NumQueue.push(Node->val);
NodeQueue.push(Node);
while(!NodeQueue.empty())
{
TreeNode* tmpNode=NodeQueue.front();
int tmpNum=NumQueue.front();
if(!tmpNode->left && !tmpNode->right)
{
result+=tmpNum;
}
if(tmpNode->left)
{
NodeQueue.push(tmpNode->left);
NumQueue.push(tmpNum*10+tmpNode->left->val);
}
if(tmpNode->right)
{
NodeQueue.push(tmpNode->right);
NumQueue.push(tmpNum*10+tmpNode->right->val);
}
NodeQueue.pop();
NumQueue.pop();
}
return result;
}
};
运行效果:
下面换个思路用深度优先遍历,Python的实现代码如下:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
result=0
def sumNumbers(self, root: TreeNode) -> int:
def DFS(node,totalSum):
if not node:
return
totalSum=totalSum*10+node.val
if (not node.left) and (not node.right):
self.result+=totalSum
return
DFS(node.left,totalSum)
DFS(node.right,totalSum)
DFS(root,0)
return self.result
运行效果:
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers