
这里采用的是先序遍历 ,代码:
class Solution {
public:
int sumNumbers(TreeNode* root) {
if(nullptr == root)
return 0;
int sum = 0;
stack<int> cur_val;
stack<TreeNode *> mystack;
cur_val.push(root->val);
mystack.push(root);
while(mystack.size()) {
TreeNode *node = mystack.top();
mystack.pop();
int tmp_val = cur_val.top();
cur_val.pop();
if(nullptr != node->right) {
mystack.push(node->right);
cur_val.push(tmp_val * 10 + node->right->val);
}
if(nullptr != node->left) {
mystack.push(node->left);
cur_val.push(tmp_val * 10 + node->left->val);
}
if(nullptr == node->left && nullptr == node->right){
sum += tmp_val;
}
}
return sum;
}
};

这段代码展示了一个C++实现的先序遍历算法,用于计算给定二叉树所有节点数值之和。通过栈来辅助遍历,当节点左右子树都为空时,将当前路径上的数值累加到总和。

被折叠的 条评论
为什么被折叠?



