码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-129 Sum Root to Leaf Numbers

时间:2015-01-14 00:43:38      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/linxiong/p/4222882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!