题解 | #二叉树中和为某一值的路径(一)#

二叉树中和为某一值的路径(一)

https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c

#include <memory>
#include <stack>
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    bool hasPathSum(TreeNode* root, int sum) {
        // write code here
        //前序遍历,并且记录每个结点的路径sum
        TreeNode* bt=root;
        stack<TreeNode*> s;
        int temp=0;//用来记录当前结点路径总和
        stack<int> curSum;//用另一个栈记录s栈中每个元素的路径长度,这样即使在回溯时也能更新长度

	  //前序遍历
        while(!s.empty()||bt!=nullptr)
        {
            while(bt!=nullptr)
            {
                s.push(bt);
			  //纪录遍历到的结点的路径长度
                temp+=bt->val;
                curSum.push(temp);

			  //检查当前遍历到的结点是否满足条件
                if(bt->left==nullptr&&bt->right==nullptr)
                {
                    if(temp==sum)
                        return true;
                }

                bt=bt->left;
            }

            if(!s.empty())
            {
                bt=s.top();
                s.pop();
                temp=curSum.top();//如果回溯了,应当使用curSum中的元素更新temp
                curSum.pop();

                bt=bt->right;
            }
        }
        return false;                                     

    }
};

前序遍历二叉树,并在遍历时记录和判断每个结点的路径总和

全部评论

相关推荐

04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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