Given a binary tree containing digits from only 0-9 , 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.
For example,
1 / 2 3
The Root-to-leaf path 1->2 represents the number 12 .
The Root-to-leaf path 1->3 represents the number 13 .
Return the sum = + = 25 .
1. Non-recursive solution
With two stack implementations, one of the stacks saves the traversed upper node, and the other stack holds the traversal of each node in the previous stack, that is, whether the left Dial hand node has been traversed.
The code is as follows
public int sumnumbers (TreeNode root) {if (root = null) return 0; int sum = 0; list<treenode> mem = new arraylist<treenode> (); list<boolean> flag = new arraylist<boolean> (); Mem.add (root); while (!mem.isempty ()) {if (Flag.size () < Mem.size ()) {Flag.add (false); } else if (!flag.get (Flag.size ()-1)) {Flag.set (Flag.size ()-1, true); } else {Mem.remove (mem.size ()-1); Flag.remove (Flag.size ()-1); Continue } if (!flag.get (Flag.size ()-1)) {if (Mem.get (Mem.size ()-1). Left! = null) {Mem.add (Mem.get (mem . Size ()-1). left); Continue }} flag.set (Flag.size ()-1, true); if (Mem.get (Mem.size ()-1). Right! = null) {Mem.add (Mem.get (Mem.size ()-1). right); Continue } if (Mem.get (Mem.size ()-1). left = = null && mem.get (Mem.size ()-1). right = = null){for (int i=mem.size ()-1; i>=0; i--) {sum + = (Mem.get (i). Val * Math.pow (Ten, Mem.size ()-i-1)); }} mem.remove (Mem.size ()-1); Flag.remove (Flag.size ()-1); } return sum; }
2. Recursive solution. The code is as follows
public int sumnumbers (TreeNode root) {
return sum (root, 0); } public int sum (TreeNode n, int s) { if (n = = null) return 0; if (n.right = = NULL && N.left = = null) return s*10 + n.val; return sum (n.left, s*10 + n.val) + sum (n.right, s*10 + n.val); }
LeetCode-129 Sum Root to Leaf Numbers