手撸二叉树之从根到叶的二进制数之和
Hello, 大家好,今天是我参加 8 月更文的第 17 天,今天给大家带来的关于二叉树相关的算法题是求二叉树从根到叶的二进制数之和,正文如下:
题目
给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
返回这些数字之和。题目数据保证答案是一个 32 位 整数。
示例 1
复制代码
示例 2
复制代码
解题思路
根据题目意思,我们可以使用递归方式来解答此题。
递归三部曲:
递归函数的参数以及返回值:函数的参数为传入的节点,以及一个用于记录当前路径和的值;由于要搜索整棵二叉树,所以该递归函数就不需要返回值了;
递归函数的终止条件:如果节点为空,则返回
递归函数的单层逻辑:如果遇到叶子节点,就把路径和放到返回值中,否则继续深度优先搜索左右子节点;
代码实现
复制代码
最后
复杂度分析:
时间复杂度:O(n)。其中 n 为树的深度。
空间复杂度:O(n)。递归所需的栈空间大小为 n 。
版权声明: 本文为 InfoQ 作者【HelloWorld杰少】的原创文章。
原文链接:【http://xie.infoq.cn/article/75bd7437655d8b8b3e1e190ae】。文章转载请联系作者。
评论