• 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);
            }
        }
    }
    
  • 相关阅读:
    Manjaro mirror in china
    gnome3.X添加开机启动项
    ssh无密钥登陆的简单配置
    ESXi虚拟磁盘共享
    记录一次fat32格式U盘不识别问题
    更换内核后重编virtualbox内核模块
    宏定义字符串连接和符号粘贴
    kernel source reading notepad
    linux kernel tainted
    设计模式-观察者模式(Observer Pattern)
  • 原文地址:https://www.cnblogs.com/reboot329/p/6116860.html
Copyright © 2020-2023  润新知