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;
        }
    };




    四.体会

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




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





  • 相关阅读:
    转载(腾讯云社区)——详解django-apscheduler的使用方法
    pipenv——python包管理工具
    xx系统需求进度02
    xx系统需求进度01
    Hbase简介
    第七周总结
    《软件需求十步走》阅读笔记一
    第六周总结
    HDFS
    金字塔表达方法
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7325495.html
Copyright © 2011-2022 走看看