给定二叉树,构造一个平衡二叉树,该树由每个节点及其子节点的和组成

时间:2020-04-26 17:06:51

标签: binary-tree binary-search-tree

我为一棵只有左或右的树做过,但是当你同时拥有这两个树时不知道该怎么做

样本输入:

6

6 10 20 1 51 43->依次

1 10 6 20 43 51->预订

样本输出:

20 6 51 131 94 36

样本输入:

5

40 60 30 20 50->顺序

50 20 30 60 40->预订

样本输出:

100 40200150130

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

public class Try {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        ArrayList<Integer> in = new ArrayList<Integer>();
        ArrayList<Integer> pre = new ArrayList<Integer>();

        for (int i = 0; i < n; i++) {
            in.add(s.nextInt());
        }

        for (int j = 0; j < n; j++) {
            pre.add(s.nextInt());
        }

        System.out.println(in);
        System.out.println(pre);

        ArrayList<Integer> sum = new ArrayList<Integer>();
        ArrayList<Integer> left = new ArrayList<Integer>();
        ArrayList<Integer> right = new ArrayList<Integer>();

        int root = pre.get(0);

        int index = in.indexOf(root);

        for(int x = 0 ; x < index;x++) {
            left.add(in.get(x));
        }
        for(int y=index+1 ;y < n  ;y++) {
            right.add(in.get(y));
        }

        System.out.println(left);
        System.out.println(right);

        if(left.isEmpty()|| right.isEmpty()) {
            Collections.reverse(pre);
            System.out.println("rev pre is"+ pre);
            sum.add(pre.get(0));
        for(int g = 1 ; g < pre.size();g++) {
            sum.add(pre.get(g)+sum.get(g-1));
        }
        System.out.println("sum tree"+ sum);
        Collections.sort(sum);
        System.out.println("sorted sum is"+ sum);

        }else {

        }


    }
}

0 个答案:

没有答案
相关问题