/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int sumNumbers(TreeNode* root) {
// write code here
//非递归方式的深度优先遍历
//深度优先遍历本质上和前序遍历没有什么区别,所以就是前序遍历的非递归方式
if(root==NULL)
return 0;
int res=0;//最终的返回结果
stack<TreeNode*> nodeStack;//这个栈专门用来存储节点
stack<int> dataStack;//这个栈用来存储值
nodeStack.push(root);//把根节点放入栈中
dataStack.push(root->val);//把根节点的值放入栈中,默认根节点的父节点的权值为0
while(!nodeStack.empty()&&!dataStack.empty()){//当栈不为空时
TreeNode*node=nodeStack.top();
nodeStack.pop();
int value=dataStack.top();
dataStack.pop();
//先放右孩子再放左孩子
if(node->right!=NULL){
nodeStack.push(node->right);
dataStack.push(value*10+node->right->val);
}
if(node->left!=NULL){//左孩子不为空
nodeStack.push(node->left);
dataStack.push(value*10+node->left->val);
}
if(node->left==NULL&&node->right==NULL){//说明已经到了叶子节点
res+=value;
}
}
return res;
}
};
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int sumNumbers(TreeNode* root) {
// write code here
//非递归方式的深度优先遍历
//深度优先遍历本质上和前序遍历没有什么区别,所以就是前序遍历的非递归方式
if(root==NULL)
return 0;
int res=0;//最终的返回结果
stack<TreeNode*> nodeStack;//这个栈专门用来存储节点
stack<int> dataStack;//这个栈用来存储值
nodeStack.push(root);//把根节点放入栈中
dataStack.push(root->val);//把根节点的值放入栈中,默认根节点的父节点的权值为0
while(!nodeStack.empty()&&!dataStack.empty()){//当栈不为空时
TreeNode*node=nodeStack.top();
nodeStack.pop();
int value=dataStack.top();
dataStack.pop();
//先放右孩子再放左孩子
if(node->right!=NULL){
nodeStack.push(node->right);
dataStack.push(value*10+node->right->val);
}
if(node->left!=NULL){//左孩子不为空
nodeStack.push(node->left);
dataStack.push(value*10+node->left->val);
}
if(node->left==NULL&&node->right==NULL){//说明已经到了叶子节点
res+=value;
}
}
return res;
}
};