zoukankan      html  css  js  c++  java
  • leetcode 112. Path Sum

    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.

    递归方法:

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 private:
    12     bool isLeaf(TreeNode *root) {
    13         return (root->left == NULL) && (root->right == NULL);
    14     }
    15 public:
    16     bool hasPathSum(TreeNode* root, int sum) {
    17         if (root == NULL)
    18             return false;
    19         if (isLeaf(root) && sum == root->val)
    20             return true;
    21         return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val);
    22     }
    23 };

    非递归:

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     bool hasPathSum(TreeNode* root, int sum) {
    13         if (root == NULL)
    14             return false;
    15         queue<TreeNode*> q;
    16         q.push(root);
    17         TreeNode *temp;
    18         while (!q.empty()) {
    19             int size = q.size();
    20             while (size--) {
    21                 temp = q.front();
    22                 q.pop();
    23                 if (temp->left != NULL) {
    24                     q.push(temp->left);
    25                     temp->left->val += temp->val;
    26                 }
    27                 if (temp->right != NULL) {
    28                     q.push(temp->right);
    29                     temp->right->val += temp->val;
    30                 }
    31                 if (temp->left == NULL && temp->right == NULL && temp->val == sum) {
    32                     return true;
    33                 }
    34                     
    35             }
    36         }
    37         return false;
    38     }
    39 };
  • 相关阅读:
    split 过滤空的元素
    Python内置函数(65)——staticmethod
    Python内置函数(64)——classmethod
    Python内置函数(63)——property
    Python内置函数(62)——exec
    Python内置函数(61)——eval
    Js里头的对象字面量
    Js中的prototype的用法二
    Js中的prototype的用法一
    Mxgraph使用总结二
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11432561.html
Copyright © 2011-2022 走看看