计算从根到叶子节点生成的所有数字之和

图片说明


基本思路,是深度优先遍历和回溯算法,逻辑是先序遍历

import java.util.ArrayList;
import java.util.Scanner;

class Node{
    public int val;
    public Node left = null;
    public Node right = null;

    public Node(int val){
        this.val = val;
    }
}
public class Main {
    private static ArrayList<Integer> array;
    private static int sumNum;
    public static void main(String[] args) {
        // 建立一颗二叉树
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> arr = new ArrayList<>();
        while(sc.hasNext()){
            arr.add(sc.nextInt());
        }
        Node root = buildTree(arr);
        sc.close();

        // 初始化
        sumNum = 0;
        array = new ArrayList<>();
        dfs(root);
        System.out.println(sumNum);
    }

    public static Node buildTree(ArrayList<Integer> arr){
        if(arr.size() == 0) return null;
        int message = arr.remove(0);
        if(message == -1){
            return null;
        }
        Node node = new Node(message);
        node.left = buildTree(arr);
        node.right = buildTree(arr);
        return node;
    }

    public static void dfs(Node node){
        if(node == null){
            return;
        }
        if(node.left == null && node.right == null){
            //计算出路径的值
            int cal = 0;
            for(Integer integer:array){
                cal = cal*10 + integer;
            }
            cal =  cal*10 + node.val;
            // 累加
            sumNum += cal;
        }else{
            array.add(node.val);
            dfs(node.left);
            dfs(node.right);
            array.remove(array.size()-1);
        }
    }
}

图片说明

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务