zoukankan      html  css  js  c++  java
  • LeetCode_Path Sum

    一.题目

    Path Sum

      Total Accepted: 57762 Total Submissions: 193808My Submissions

    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.

    For 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.

    Show Tags
    Have you met this question in a real interview?  
    Yes
     
    No

    Discuss














    二.解题技巧

        这道题是一道深度优先搜索的。通过分别计算二叉树的左右子树是否的和是否等于sum-root->val来进行深度优先搜索。仅仅有到达也结点搜索才结束,因此,递归的退出条件就是到达叶结点,同一时候。也要考虑输入是空指针的情况,这种情况返回false值。同一时候,因为仅仅要推断是否存在。而不用找到每个这种路径。因此,仅仅要左子树满足条件时,就能够直接返回,不须要处理右子树,这样就能够进行剪枝,降低计算的复杂度。

        递归做法的时间复杂度为O(n),空间复杂度为O(logn)。


    三.实现代码

    #include <iostream>
    
    
    /**
    * Definition for a binary tree node.
    * struct TreeNode {
    *     int val;
    *     TreeNode *left;
    *     TreeNode *right;
    *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    * };
    */
    
    
    struct TreeNode
    {
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    
    
    class Solution
    {
    public:
        bool hasPathSum(TreeNode* root, int sum)
        {
            if (!root)
            {
                return false;
            }
    
            if (!root->left && !root->right && root->val == sum)
            {
                return true;
            }
    
            int SumChild = sum - root->val;
    
            if (hasPathSum(root->left, SumChild))
            {
                return true;
            }
    
            if (hasPathSum(root->right, SumChild))
            {
                return true;
            }
    
            return false;
        }
    };




    四.体会

        这道题是一道普通的二叉树深度优先搜索的题。能够通过递归来实现。




    版权全部,欢迎转载。转载请注明出处,谢谢微笑





  • 相关阅读:
    centos ssh远程登陆
    Vim 技巧
    php and js to facebook登陆 最佳实践
    vim 编辑器常规操作
    js 函数定义三种方式
    ORDER BY 默认升序排列
    sql = 和<>遵循的sql-92标准的设置SET ANSI_NULLS ON
    添加FB登陆时,需要curl扩展
    array(1) { [0]=> int(5) }和array(1) { [0]=> string(1) "5" }
    Android第三方推送引擎比较
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7325495.html
Copyright © 2011-2022 走看看