zoukankan      html  css  js  c++  java
  • 129. Sum Root to Leaf Numbers

    乍看之下没什么难的,应该用DFS,做起来发现确实也不难,DFS。

    用STRING来储存当前值,到底了就转换成Integer然后添加到LIST里
    最后LIST求和就行了。

    public int sumNumbers(TreeNode root) 
        {
            if(root == null) return 0;
    
          	List<Integer> resList = new ArrayList<Integer>();
            
    
           	helper(root,"",resList);
    
    
           	int res = 0;
           	for(int temp:resList)
           	{
           		res += temp;
           	}
    
           	return res;
        }	
    
        public void helper(TreeNode root, String temp, List<Integer> resList)
        {
        	if(root == null) return;
    
    
    
        	if(root.left == null && root.right == null)
        	{
        	    int toAdd = Integer.valueOf(temp+Integer.toString(root.val));
        		resList.add(toAdd);
        		return;
        	}
    
        	if(root.left != null)
        	{
        		helper(root.left,temp+Integer.toString(root.val),resList);
        	}
    
        	if(root.right != null)
        	{
        		helper(root.right,temp+Integer.toString(root.val),resList);
        	}
    
        	return;
    
    
        }
    

    感觉上不是很难

    另一种还是DFS 可以避免 使用数组 直接加每个NODE的VALLEVEL10

    
        public int sumNumbers(TreeNode root) 
        {
        	return helper(root,0);    
    
    
        }
    
    
        public int helper(TreeNode root, int total)
        {
        	if(root == null) return 0;
    
        	if(root.left == null && root.right == null) return total*10 + root.val;
    
        	return helper(root.left,total*10+root.val) + helper(root.right,total*10+root.val);
        }
    
    

    简单多了。。



    二刷。

    和一刷一样

    一刷一开始想成转换为SRING,不知道怎么有这种惊世骇俗的想法的。。

    public class Solution {
        public int sumNumbers(TreeNode root) 
        {
            int res = 0;
            if(root == null) return res;
            return helper(root,0);
        }
        
        public int helper(TreeNode root, int val)
        {
            if(root == null) return 0;
            int next = val*10 + root.val;
            if(root.left == null && root.right == null) return next;
            else return helper(root.left,next) + helper(root.right,next);
        }
    }
    

    三刷。

    post Order 和 pre Order的结合。

    post是因为找到leave才能存储和,pre Order是因为必须提前添加数字。

    public class Solution {
        public int sumNumbers(TreeNode root) {
            return helper(root, 0);
        }
        
        public int helper(TreeNode root, int temp) {
            if (root == null) return 0;
            temp = 10*temp + root.val;
            if (root.left == null && root.right == null) {
                return temp;
            } else {
                return helper(root.left, temp) + helper(root.right, temp);
            }
        }
    }
    
  • 相关阅读:
    hashmap的一些基础原理
    关于uuid
    读锁跟写锁的区别
    栈为什么效率比堆高
    MySQL行级锁、表级锁、页级锁详细介绍
    MYSQL MyISAM与InnoDB对比
    MYSQL锁表问题解决
    mysql查询锁表语句
    三种排序方法
    正则表达式
  • 原文地址:https://www.cnblogs.com/reboot329/p/6116860.html
Copyright © 2011-2022 走看看