之前笔试的时候遇到关于二叉树的题目,需要输入二叉树层序遍历的节点值进行建树。 对于空节点用null表示。
使用hashmap辅助建树,键值对为<Integer,TreeNode>,键是输入的字符串数组下标,值是数组元素对应的树节点。
数组从前向后遍历,当取出对应的字符串不是"null"的时候,说明这个字符串已经建过对应的树节点并且已经存入了HashMap中,所以从hashmap中取出这个节点,然后分别找对其左右子树根节点对应的数组下标(完全二叉树中,下标为i的节点,左右子树根节点下标分别为2i+1和2i+2)。如果数组元素不是"null",则建树并且存入hashmap。
初始时需要对根节点和其左右子树建树。
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//将输入的字符串以空格为间隔分割为一个字符串数组。
String[] strs=br.readLine().trim().split(" ");
Map<Integer,TreeNode> map=new HashMap<>();
//建立根节点,对应下标为0的数组元素。
map