leetcode路径总和iii

https://leetcode-cn.com/submissions/detail/2497483/
给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。

代码思路
       从根节点开始,将根节点的值放入列表中,向下遍历子节点,每遇到一个子节点,列表中元素都要加上子节点的值,然后列表追加子节点的值,分别得到从根节点到该子节点可能组合的和,从而寻找符合条件的路径。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def pathSum(self, root, sum_):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: int
        """
        self.sum_=sum_
        self.mark = 0
        self.findPath(root,[])
        print(self.mark)   
        return self.mark
        
    def findPath(self,root,sums):
        if not root :
            return
        for i in range(len(sums)):
            sums[i]+=root.val
        sums.append(root.val)
        self.mark+=sums.count(self.sum_)

        self.findPath(root.left,sums[:])
        self.findPath(root.right,sums[:])

       网上找到一个cpp的列子,遍历所有节点,每个节点均要再次向下遍历路径,使用cpp运行确实很快,耗时15+ms,但按照这个思路改成python代码耗时飙升到1200+ms,难不成cpp效率能比python高近百倍,可惜不太懂cpp,没能按自己的思路改成cpp进行比较。
代码来源:https://blog.csdn.net/weixin_38368941/article/details/80296641

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int pathSum(TreeNode* root, int sum) {
        int cnt = 0;
        dfs1(root, sum, cnt);
        return cnt;
        }
    //dfs用来计算二叉树中符合要求的路径的长度
    void dfs(TreeNode* root, int sum, int& cnt){
         if(root == NULL) return;
        //累计符合要求的路径个数
       if(root->val == sum) cnt++;
        dfs(root->left, sum-root->val, cnt);
        dfs(root->right, sum-root->val, cnt);
     }
    //用来遍历每个节点
    void dfs1(TreeNode* root, int sum, int& cnt){
         if(root == NULL) return;
        dfs(root, sum, cnt);
        dfs1(root->left, sum, cnt);
        dfs1(root->right, sum, cnt);
    }

};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,183评论 19 139
  • 题量有点多,建议Ctrl + F题号或题目哦~ 二叉树的遍历(前序遍历,中序遍历,后序遍历)[144] Binar...
    野狗子嗷嗷嗷阅读 13,002评论 2 37
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,990评论 1 31
  • 最近学习了一下用缓动函数模拟物理动画的效果,可以实现一些比较高级的动画效果,比如弹簧效果等。 1.缓动函数的动画效...
    哈哈大p孩阅读 7,706评论 0 8
  • 曾经有一个骑行梦, 我清楚记得因为喜欢那个男孩, 他有着很挺拔的鼻子,很修长的手指, 我喜欢跟随他,看着他骑行的背...
    陈隋阅读 1,639评论 6 9

友情链接更多精彩内容