满二叉树,中序遍历就能还原二叉树,这算是本题的bug。
中序二叉满树到中序求和二叉树
参考归并排序的写法。
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
//满二叉树,ints必为奇数,中间那个结点是根结点。返回值是左右子树和根节点的和。
public static int ToSumTree(int start, int end, int[] tree){
if(start == end - 1){
int temp = tree[start];
tree[start] = 0;
return temp;
}
int mid = (end + start) / 2;
int node = tree[mid];
tree[mid] = ToSumTree(start, mid, tree) + ToSumTree(mid + 1, end, tree);
return node + tree[mid];
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
sc.nextLine();
String[] line = sc.nextLine().split(" ");
int[] midFullTree;
midFullTree = Arrays.stream(line).mapToInt(Integer::parseInt).toArray();
ToSumTree(0, midFullTree.length, midFullTree);
// System.out.println(Arrays.toString(midFullTree));
for(int i = 0; i < midFullTree.length; i++){
System.out.print(midFullTree[i]);
if(i<midFullTree.length-1){System.out.print(" ");}
}
}
}

京公网安备 11010502036488号