• LeetCode 112. Path Sum 二叉树的路径和 C++


    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.

    Note: A leaf is a node with no children.

    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.

    方法一:利用深度优先搜索DFS的方法来遍历每一条完整的路径,利用递归方法不停地找子节点的左右结点。首先,若输入的是空节点,则返回false,若是为叶子结点且其值为当下的值时,则返回true,否则,只要子节点的左右结点中任一结点可行则返回true。(C++)

    1 bool hasPathSum(TreeNode* root, int sum) {
    2         if(!root)
    3             return false;
    4         if(root->val==sum&&!root->left&&!root->right)
    5             return true;
    6         return hasPathSum(root->left,sum-root->val)||hasPathSum(root->right,sum-root->val);
    7     }

    方法二:使用遍历的方法,每一个结点都加上其父结点的值,如果到叶子结点时,其值等于sum,就存在一条符合题意的路径,在这道题中,不一定非要右结点先入栈,左右顺序不影响结果。(C++)

     1  bool hasPathSum(TreeNode* root, int sum) {
     2         if(!root)
     3             return false;
     4         stack<TreeNode*> s{{root}};
     5         while(!s.empty()){
     6             TreeNode* tmp=s.top();
     7             s.pop();
     8             if(!tmp->left&&!tmp->right){
     9                 if(tmp->val==sum)
    10                     return true;
    11             }
    12             if(tmp->right){
    13                 tmp->right->val+=tmp->val;
    14                 s.push(tmp->right);
    15             }
    16             if(tmp->left){
    17                 tmp->left->val+=tmp->val;
    18                 s.push(tmp->left);
    19             }
    20         }
    21         return false;
    22     }
  • 相关阅读:
    CSRF
    PHP XXE漏洞
    jumpserver安装与部署
    ELK
    docker pull下来的镜像放哪儿了?
    MobSF 框架安装使用部署
    加密流量分析
    Pόlya定理-学习笔记
    所有区间异或的和的 一个加强
    计算一个序列有多少个不同的01子序列
  • 原文地址:https://www.cnblogs.com/hhhhan1025/p/10698653.html
Copyright © 2020-2023  润新知