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




    四.体会

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




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





  • 相关阅读:
    删除某个目录下面指定名字的文件夹的命令
    ubuntu 12.04 下面安装vmware workstation 8.0.4
    最近一段时间总结
    ejb 学习笔记HelloWorld入门实例
    状态会话bean的session周期与Web上的session周期
    ubuntu做路由器
    Heron and His Triangle 递推 高精度 打表 HDU6222
    洛谷训练赛 A.Misaka Network
    HZNU Training 1 for Zhejiang Provincial Competition 2020 Xeon第三场训练赛
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7325495.html
Copyright © 2020-2023  润新知