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);
        }
    }
}
原文地址:https://www.cnblogs.com/reboot329/p/6116860.html