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

图片说明


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

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);
        }
    }
}

图片说明

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 10:28
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务