LeetCode129——求根到叶子节点数字之和

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/description/

题目描述:

LeetCode129——求根到叶子节点数字之和_第1张图片

知识点:树的深度优先遍历

思路:树的深度优先遍历

深度优先遍历寻求所有路径,再计算每条路径代表的数字,最后求和即可。

时间复杂度和空间复杂度均是O(n),其中n为树中的节点个数。

JAVA代码:

public class Solution {
    private ArrayList tempPath = new ArrayList<>();
    private ArrayList> paths = new ArrayList<>();

    public int sumNumbers(TreeNode root) {
        int sum = 0;
        if(null == root){
            return sum;
        }
        dfs(root);
        for(ArrayList list : paths){
            int len = 0;
            for(TreeNode node : list){
                len = len * 10 + node.val;
            }
            sum += len;
        }
        return sum;
    }

    private void dfs(TreeNode nowVisit){
        tempPath.add(nowVisit);
        if(null == nowVisit.left && null == nowVisit.right){
            paths.add(new ArrayList<>(tempPath));
            tempPath.remove(tempPath.size() - 1);
            return;
        }
        if(null != nowVisit.left){
            dfs(nowVisit.left);
        }
        if(null != nowVisit.right){
            dfs(nowVisit.right);
        }
        tempPath.remove(tempPath.size() - 1);
    }
}

LeetCode解题报告:

LeetCode129——求根到叶子节点数字之和_第2张图片

 

你可能感兴趣的:(LeetCode题解,LeetCode,树的深度优先遍历,求根到叶子节点数字之和)