问题描述:给定一个二叉树,他的每个节点凑存放一个0-9的数字,每条从根到叶子节点的路径都代表一个数字,例如,从根到叶子节点路径1->2->3代表数字123,计算从根到叶子结点生成的所有数字之和。
DFS求解:每次往下走的过程中,当前节点的数值为父节点*10加当前节点的值,若遇到的是根节点,则将当前结果保存在num中。
int total=0;
public void dfs(TreeNode root,int parent)
{
if(root.left==null&&root.right==null){total+=root.val+parent*10;return;}
if(root.left!=null){dfs(root.left,root.val+parent*10);}
if(root.right!=null){dfs(root.right,root.val+parent*10);}
}
public int?Dfs(TreeNode root)
{
dfs(root,0);
???????return total;
}
BFS求解:每次将节点值本身和本身的值放入队列中,如果当前节点左节点和右节点都为null,则将当前节点的值加入最后的结果中。
public int bfs(TreeNode root)
{
int sum=0;
Queue<TreeNode>queuetn=new LinkedList<>();
Queue<Integer>queueInt=new LinkedList<>();
queuetn.add(root);
queueInt.add(root.val);
while(!queuetn.isEmpty())
{
TreeNode tn=queuetn.poll();
int val=queueInt.poll();
if(tn.left==null&&tn.right==null){sum+=val;}
if(tn.left!=null){queuetn.add(tn.left);queueInt.add(tn.val*10+tn.left.val);}
if(tn.right!=null){queuetn.add(tn.right);queueInt.add(tn.val*10+tn.right.val);}
}
???????return sum;
}