写点什么

【LeetCode】从根到叶的二进制数之和 Java 题解

用户头像
HQ数字卡
关注
发布于: 1 小时前

题目描述

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。


对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。


返回这些数字之和。题目数据保证答案是一个 32 位 整数。


示例 1:

输入:root = [1,0,1,0,1,0,1]输出:22解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-of-root-to-leaf-binary-numbers著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法每日一题是二叉树路径求和的问题,这个问题的特殊之处是需要转换成二进制求和。

  • 递归的终止条件是当前节点为空,或者当前节点是叶子节点。得到如下代码:

代码

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode() {} *     TreeNode(int val) { this.val = val; } *     TreeNode(int val, TreeNode left, TreeNode right) { *         this.val = val; *         this.left = left; *         this.right = right; *     } * } */class Solution {    public int sumRootToLeaf(TreeNode root) {        return helper(root, 0);    }
public int helper(TreeNode root, int sum) { if (root == null) { return 0; } sum = (sum << 1) + root.val; if (root.left == null && root.right == null) { return sum; } return helper(root.left, sum) + helper(root.right, sum); }}
复制代码

总结

  • 上述代码的时间复杂度是 O(n), 空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 1 小时前阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】从根到叶的二进制数之和Java题解