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);
            }
        }
    }
    
  • 相关阅读:
    为什么有人说指针是 C 语言的精髓?
    属于编程的黄金时代结束了吗?不,这片领地的大门仍然敞开
    编程和编程语言竟然不是一回事,你知道吗?
    为什么 C 语言是程序员的首选,你知道吗?
    CRoundButton2 -一个花哨的图形按钮
    彩虹按钮
    EnableGroupboxControls -一个非mfc函数,用于启用或禁用groupbox中的所有控件
    CImageButtonWithStyle -按钮使用图像与XP视觉风格
    使用。net SDK编写位图按钮控件
    Joe的自动重复按钮类的。net端口
  • 原文地址:https://www.cnblogs.com/reboot329/p/6116860.html
Copyright © 2011-2022 走看看