求根到叶子节点数字之和-二叉树

129. 求根节点到叶节点数字之和 - 力扣(LeetCode)

深度优先遍历dfs;

遍历到叶子节点就返回;

class Solution {
public:
    int sumNumbers(TreeNode* root) {
        return dfs(root, 0);
    }

    int dfs(TreeNode* root,int prenum)
    {
        if(root == nullptr)
        {
            return 0;
        }

        int sum = prenum * 10 + root->val;

        if(root->left == nullptr && root->right == nullptr)
        {
            return sum;
        }

        return dfs(root->left, sum) + dfs(root->right, sum);
    }
};

广度优先遍历

两个队列,先进先出queue;

一个是存root节点,一个存val;

两个队列同时push,同时pop

class Solution {
public:
    int sumNumbers(TreeNode* root) {
        if (root == nullptr) {
            return 0;
        }

        int sum = 0;
        queue<TreeNode*> treenode;
        queue<int> treenum;

        treenode.push(root);
        treenum.push(root->val);

        while(!treenode.empty())
        {
            TreeNode* node = treenode.front();
            int num = treenum.front();

            treenum.pop();
            treenode.pop();

            TreeNode* left = node->left;
            TreeNode* right = node->right;

            if(left == nullptr && right == nullptr)
            {
                sum += num;
            }
            else
            {
                if(left != nullptr)
                {
                    treenode.push(left);
                    treenum.push(num * 10 + left->val);
                }
                if(right != nullptr)
                {
                    treenode.push(right);
                    treenum.push(num * 10 + right->val);
                }
            }

        }
    return sum;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值