0
点赞
收藏
分享

微信扫一扫

记leetcode一个奇怪bug

丹柯yx 2022-04-14 阅读 122

题目描述:

  1. 路径总和
    给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。


问题描述

提示:这里描述项目中遇到的问题:

顺手写的出入栈,属实没必要,但是样例都过了

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
    private:
    int res;
    stack<TreeNode*> road={};
public:
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(!root)
        {
            return false;
        }

        if(!root->left&&!root->right)
        {
            return root->val==targetSum?true:false;
        }
        res=false;
        stack<TreeNode*> road;
        instack(root,targetSum);
        //此处加入
        return res;

    }

    void instack(TreeNode* r,int t)
    {
        // stack<int> road;
        if(!res)
        {
                    road.push(r);
                    int te=t-(r->val);
            

            if(r->left&&r->right)
            {

                instack(r->left,te);
                road.pop();
                instack(r->right,te);
                            road.pop();

                return;

            }
            else if(r->left)
            {
                instack(r->left,te);
                            road.pop();

                return;
            }
            else if(r->right)
            {
                instack(r->right,te);
                            road.pop();

                return;
            }
            else if(!r->left&&!r->right&&te!=0)
            {
                road.pop();
                return;
            }
            else if(!r->left&&!r->right&&te==0)
            {
                res=true;
                road.pop();
                return;
            }
        }
        else 
        return;

    }
};
	

实际上出入栈和建立栈的内容一注释就通过了,不过题主之前在做工程,脑子有点昏,实际上 加上栈也是ok的,出现以下问题:

题主人麻了,百度也没结果,推了以下发现没啥问题.

原因分析:

是不是没释放完所有资源啊…还有头节点,于是题主在 return 前 加上
road.pop(),然后通过了…呵呵


总结:

leetcode判断题的机制需要时刻注意,特别对于一些资源的 初始化 回收问题
那你麻麻的 链表题也没让 释放 删除的节点 啊!!!
我就草了!!!

举报

相关推荐

0 条评论