问题描述
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. Note: A leaf is a node with no children. Example : 地址
问题分析
考察一棵树的所有路径形成的数的和 DFS(先序遍历)
以空节点作为递归终止条件 以叶子结点作为递归终止条件 两栈来模拟DFS 两队列实现 BFS
代码实现
public int sumNumbers (TreeNode root) {
return sumNumbers(root, 0 );
}
public int sumNumbers (TreeNode root, int preValue) {
if (root == null ) {
return 0 ;
}
int curValue = preValue * 10 + root.val;
if (root.left == null && root.right == null ) {
return curValue;
}
return sumNumbers(root.left, curValue) + sumNumbers(root.right, curValue);
}
public int sumNumbers (TreeNode root) {
if (root == null ) {
return 0 ;
}
return sumNumbers(root, 0 );
}
public int sumNumbers (TreeNode root, int preValue) {
int curValue = preValue * 10 + root.val;
if (root.left == null && root.right == null ) {
return curValue;
}
int leftSum = root.left == null ? 0 : sumNumbers(root.left, curValue);
int rightSum = root.right == null ? 0 : sumNumbers(root.right, curValue);
return leftSum + rightSum;
}
public int sumNumbers (TreeNode root) {
if (root == null ) {
return 0 ;
}
Stack<TreeNode> nodeStack = new Stack<>();
Stack<Integer> pathStack = new Stack<>();
nodeStack.push(root);
pathStack.push(0 );
int res = 0 ;
while (! nodeStack.isEmpty()) {
TreeNode node = nodeStack.pop();
int preValue = pathStack.pop();
int curValue = preValue * 10 + node.val;
if (node.left == null && node.right == null ) {
res += curValue;
}
if (node.left != null ) {
nodeStack.push(node.left);
pathStack.push(curValue);
}
if (node.right != null ) {
nodeStack.push(node.right);
pathStack.push(curValue);
}
}
return res;
}