zoukankan      html  css  js  c++  java
  • leetcode 112 路径总和 特别关注

     1 /*
     2  * @lc app=leetcode.cn id=112 lang=cpp
     3  *
     4  * [112] 路径总和
     5  */
     6 
     7 // @lc code=start
     8 /**
     9  * Definition for a binary tree node.
    10  * struct TreeNode {
    11  *     int val;
    12  *     TreeNode *left;
    13  *     TreeNode *right;
    14  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    15  * };
    16  */
    17 class Solution {
    18 public:
    19     /*
    20     如果需要搜索整颗二叉树,那么递归函数就不要返回值,
    21     如果要搜索其中一条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要及时返回。
    22     
    23     所以本次搜索需要返回值
    24 
    25     1. 确定递归函数的参数和返回值类型
    26     2、确定终止条件
    27     2. 确定单层递归的逻辑
    28     */
    29     
    30     bool hasPathSum(TreeNode* root, int sum) {
    31         if(root==nullptr) return false;
    32 
    33         if(!root->left&&!root->right&&root->val==sum)
    34             return true;
    35         return hasPathSum(root->left,sum-root->val) || 
    36                 hasPathSum(root->right,sum-root->val);
    37     }
    38 
    39     /*  思路:
    40     class Solution {
    41 private:
    42     bool traversal(TreeNode* cur, int count) {
    43         if (!cur->left && !cur->right && count == 0) return true; // 遇到叶子节点,并且计数为0
    44         if (!cur->left && !cur->right) return false; // 遇到叶子节点直接返回
    45 
    46         if (cur->left) { // 左
    47             count -= cur->left->val; // 递归,处理节点;
    48             if (traversal(cur->left, count)) return true;
    49             count += cur->left->val; // 回溯,撤销处理结果
    50         }
    51         if (cur->right) { // 右
    52             count -= cur->right->val; // 递归,处理节点;
    53             if (traversal(cur->right, count)) return true;
    54             count += cur->right->val; // 回溯,撤销处理结果
    55         }
    56         return false;
    57     }
    58 
    59 public:
    60     bool hasPathSum(TreeNode* root, int sum) {
    61         if (root == NULL) return false;
    62         return traversal(root, sum - root->val);
    63     }
    64 };
    65 
    66 
    67     */
    68 };
    69 // @lc code=end
  • 相关阅读:
    FJUT3260
    Codeforces Round #387 (Div. 2)
    poj 1375
    试题 历届试题 蚂蚁感冒(模拟)
    丢手绢(尺取)
    「金」点石成金(dfs)
    小A买彩票(dp)
    不平行的直线
    最少交换次数
    第k小数(桶排序)
  • 原文地址:https://www.cnblogs.com/yaodao12/p/13945481.html
Copyright © 2011-2022 走看看