题目描述:
给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1->2->3,那么这条路径就用123来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
1↵ / ↵ 2 3
根节点到叶子节点的路径1->2用数字12代替
根节点到叶子节点的路径1->3用数字13代替
所以答案为12+13=25
题目分析:
将树从根节点进行遍历,每到一个叶子节点就是一个数,其路径上的各个节点相当于上一个节点的val10+当前节点的值val。将其累加起来就是所要求的和。每个节点相当于可以看做是递归过程,当前节点的子节点不为空是当前节点的值10+子节点的计算结果。
代码分析:
public class Solution {
public int sumNumbers(TreeNode root) {
if(root==null){//边界判断,空树返回0
return 0;
}
if(root.left==null&&root.right==null){//若树只有根节点,则返回根节点的值
return root.val;
}
return findNode(root,0);//传递树的头结点和sum初始值
}
public int findNode(TreeNode node,int sum){//相当于树的前序遍历
sum=sum*10+node.val;
if(node.left==null&&node.right==null){//若为叶子节点不用进行递归
return sum;
}
int left=0;int right=0;
if(node.left!=null){//递归求左子树的和
left= findNode(node.left,sum);
}
if(node.right!=null){//递归求右子树的和
right= findNode(node.right,sum);
}
return left+right;//左树和右树相加为结果
}
}