package com.heu.wsq.leetcode.tree;
/**
* 1022. 从根到叶的二进制数之和
* @author wsq
* @date 2020/12/22
* 给出一棵二叉树,其上每个结点的值都是 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
*
* 链接:https://leetcode-cn.com/problems/sum-of-root-to-leaf-binary-numbers
*/
public class SumRootToLeaf {
private int sum = 0;
public int sumRootToLeaf(TreeNode root){
dfs(root, new StringBuilder());
return sum;
}
private void dfs(TreeNode node, StringBuilder s) {
s.append(node.val);
if (node.left == null && node.right == null){
int num = getNum(s);
sum += num;
s.deleteCharAt(s.length() - 1);
return;
}
if (node.left != null){
dfs(node.left, s);
}
if (node.right != null){
dfs(node.right, s);
}
s.deleteCharAt(s.length() - 1);
}
private int getNum(StringBuilder s) {
int length = s.length();
int tempSum = 0;
for (int i = 0; i < length; i++){
if(s.charAt(i) == '1'){
tempSum += Math.pow(2, length - 1 - i);
}
}
return tempSum;
}
}
1022. 从根到叶的二进制数之和
最新推荐文章于 2022-09-07 23:06:28 发布