leetcode 129求根到叶子节点数字之和
思路
找到每一条从根到叶子的路径,把值算出来存到列表里,最后加起来,时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn),还没想到其他好办法
List<Integer> list=new ArrayList<>();//存储根到叶子的值
public int sumNumbers(TreeNode root) {
if (root==null) return 0;//空树返回0
int num=root.val;//记录根到当前节点的值
int res=0;//结果
leafnum(num, root);
for (Integer integer : list) {
res+=integer;
}
return res;
}
public void leafnum(int num,TreeNode node){
if (node.left==null&&node.right==null){//递归出口,当前节点是叶子
list.add(num);//把值加入列表
num/=10;//回溯
return;
}
if (node.left!=null){//左子节点不为空,当前的值*10+左子节点的值,并且递归遍历左子节点
leafnum(num*10+node.left.val,node.left);
}
if (node.right!=null)//右子节点不为空,当前的值*10+右子节点的值,并且递归遍历右子节点
leafnum(num*10+node.right.val,node.right);
}