public class test2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 输入数组长度
int len = scan.nextInt();
int[] nodeList = new int[len];
// 依次输入节点数字
for (int i = 0; i < len; i++) {
nodeList[i] = scan.nextInt();
}
// 生成数
TreeNode head = new TreeNode(nodeList[0]);
generateTree(nodeList, head, 0);
printTree(head);
}
public static void generateTree(int[] nodeList, TreeNode node, int index){
// 若索引已经超出范围,则退出递归
if(index >= nodeList.length) return;
// 记录左右节点的索引
int leftIndex = index * 2 + 1;
int rightIndex = leftIndex + 1;
// 左索引存在,则接入左孩子,对左孩子使用递归
if(leftIndex < nodeList.length){
node.leftChild = new TreeNode(nodeList[leftIndex]);
generateTree(nodeList, node.leftChild, leftIndex);
}
// 右索引存在,则接入右孩子,对右孩子使用递归
if(rightIndex < nodeList.length){
node.rightChild = new TreeNode(nodeList[rightIndex]);
generateTree(nodeList, node.rightChild, rightIndex);
}
}
// 广度优先打印节点
public static void printTree(TreeNode head){
LinkedList<TreeNode> nodeList = new LinkedList<>();
nodeList.add(head);
while(!nodeList.isEmpty()){
TreeNode pop = nodeList.pop();
if(pop.leftChild != null){
nodeList.add(pop.leftChild);
}
if(pop.rightChild != null){
nodeList.add(pop.rightChild);
}
System.out.print(pop.val + " ");
}
}
static class TreeNode{
TreeNode leftChild = null;
TreeNode rightChild = null;
int val;
TreeNode(){
}
TreeNode(int val){
this.val = val;
}
}
}
结果: