题解 | #二叉树根节点到叶子节点的所有路径和#

二叉树根节点到叶子节点的所有路径和

http://www.nowcoder.com/practice/185a87cd29eb42049132aed873273e83

题意

给定一颗二叉树,每个节点上有一个数字,计算每一条从根节点到叶子节点的路径组成的数字的和。

思路

由于二叉树的左右子树也都是二叉树,我们只需要对其递归操作就能得到结果,这里我们使用深度优先搜索的方法,从根节点开始,分别计算左右子树路径和,每到一个叶子节点说明已经找到了一条路径,将总和sumTotsumTot加上这次的路径值,最后就能得到结果。

例如对于如图二叉树,根节点为1,其右子树的路径为1371-3-7,故右子树路径和就是137,左子树有两条路径分别为12451-2-4-512461-2-4-6,故左子树路径和为1245+1246=2491,答案即为2628。

alt

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int dfs(TreeNode* now,int sumTot)
    {
        if(now == NULL) return 0;//若当前节点不存在返回0
        int sumNow = 10 * sumTot + now->val;//计算当前的路径值
        if(now->left == NULL && now->right == NULL)
            return sumNow;//到达叶子节点,返回该条路径值
        return dfs(now->left,sumNow)+dfs(now->right,sumNow);//未到达叶子结点,继续搜索
    }
    int sumNumbers(TreeNode* root) {
        return dfs(root,0);//从根节点开始搜索
    }
};

复杂度分析

时间复杂度:O(n)O(n),nn是二叉树的节点个数,每个节点都一定遍历到了一次。

空间复杂度:O(n)O(n),为深度优先搜索所用栈空间。

全部评论

相关推荐

不知道怎么取名字_:两个方向 1.简历针对性准备下 2.面试前也需要准备的 主要还是要看各个公司需求,看公司行业和岗位描述,那里面已经写了对技术的需求,一份简历,不可能和所有嵌入式岗位都匹配的
投递北京经纬恒润科技股份有限公司等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务