题解 | #二叉树根节点到叶子节点的所有路径和#

二叉树根节点到叶子节点的所有路径和

http://www.nowcoder.com/practice/185a87cd29eb42049132aed873273e83

/**
 * 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;
    }
};
全部评论

相关推荐

05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务