Leetcode 112. Path Sum

Leetcode 112.  Path Sum

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

For example:
Given the below binary tree and  sum = 22 ,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

题目要求求出根节点到叶子节点各个节点的值加起来是否有一条路能满足和为题目给出的sum,这题使用深度优先搜索,从根节点直接搜索到叶子节点,从左子节点开始一路向下搜索相加,将经过的节点存储在一个栈内,将得到的结果存储在另一个栈内,直到叶子节点,如果没有,则弹出栈顶,搜索叶子节点的前一个节点的右节点,直到搜索玩整棵二叉树,若是存在,返回true,若是不存在,返回false。

class Solution {

public:
    bool hasPathSum(TreeNode* root, int sum) {
        if (root == NULL) return false;
        
        stack<TreeNode*> vec_one;
        stack<int> vec_two;
        
        int s = 0;
        TreeNode* temp = TreeNode(root->val);
	temp->left = root ->left;
	temp->right = root->right;
        
        while (!vec_one.empty() || temp != NULL) {
            if (temp != NULL) {
                s += temp->val;
                vec_one.push(temp);
                vec_two.push(s);
                temp = temp->left;
            } else {
                temp = vec_one.top();
                s = vec_two.top();
                vec_one.pop();
                vec_two.pop();
                if (s == sum && temp->left == NULL && temp->right == NULL) return true;
                temp = temp->right;
            }
        }
        return false;
    }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值