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

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

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

/**

  • struct TreeNode {
  • int val;
  • struct TreeNode *left;
  • struct TreeNode *right;
  • }; */

本题的解题思路是先用队列层次遍历一边树,再将树的VAL值改成权值(从根节点出发的值),更改完之后再用队列再从新遍历一边节点,找到sum值于权值相同的节点,同时判断它是不是叶子节点。这里用到了两个队列,有大佬用一个栈就实现了,不过内存是一样的,理论上用栈可能更***觉代码有很多冗余的地方,有空我再来修改

class Solution { public: /** * * @param root TreeNode类 * @param sum int整型 * @return bool布尔型 / bool hasPathSum(TreeNode root, int sum) { // write code here if(!root) return false;//判断树是不是空的 queue<TreeNode *>q; if((root->val==sum)&&(root->left==NULL)&&(root->right==NULL)) return true;//判断树是不是只有一个节点且权值为空

    q.push(root);

// if((root->left==NULL)&&(root->right==NULL)) // return false;

    while(!q.empty()){ //遍历树加权值
        TreeNode *n1=q.front();
        q.pop();
        int a=n1->val;
        
        if(n1->left){
             n1->left->val=n1->left->val+a; 
         q.push(n1->left);
          
        }
         if(n1->right){
             n1->right->val=n1->right->val+a;  
         q.push(n1->right);
          
        }
    }
    q.push(root);
    while(!q.empty()){ //查找权值等于SUM的节点
        TreeNode *n1=q.front();
        q.pop();
        
        if(n1->left){
         q.push(n1->left);
          
        }
         if(n1->right){
         q.push(n1->right);
        }
        if((n1->val==sum)&&(n1->left==NULL)&&(n1->right==NULL))
            return true;
    }
      return false;
}

};

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务