A binary tree question.
The general ieda is using preorder traversal in recursion way. Iterative solution is also accepted.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
class { int sum; public int sumNumbers(TreeNode root) { sum = 0; dfs(root, 0); return sum; } public void dfs(TreeNode node, int cur) { if (node == null) return; cur = cur * 10 + node.val; if (node.left == null && node.right == null) { sum += cur; return; } if (node.left != null) dfs(node.left, cur); if (node.right != null) dfs(node.right, cur); }
public int iterative(TreeNode root) { if (root == null) return 0; Stack<TreeNode> stack = new Stack<>(); Stack<Integer> sum = new Stack<>(); stack.push(root); sum.push(root.val); int res = 0; while (!stack.isEmpty()) { TreeNode node = stack.pop(); int cur = sum.pop(); if (node.left == null && node.right == null) { res += cur; } if (node.right != null) { stack.push(node.right); sum.push(cur * 10 + node.right.val); } if (node.left != null) { stack.push(node.left); sum.push(cur * 10 + node.left.val); } } return res; } }
|
近期评论