首页 > 代码库 > LeetCode-129 Sum Root to Leaf Numbers

LeetCode-129 Sum Root to Leaf Numbers

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.

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 = 12 + 13 = 25.

1. 非递归解法

借助两个栈实现,其中一个栈保存遍历到的上层节点,另一个栈保存上一个栈中各个节点的遍历情况,即记录左子结点是否已遍历。

代码如下

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(10, mem.size() - i - 1)); 	        	}        	}        	mem.remove(mem.size() - 1);        	flag.remove(flag.size() - 1);        }                return sum;    }

  

2. 递归解法。代码如下

 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