最快速的建立二叉树的方法就是自己写 层序遍历 的数组,然后再用工具类建树啦
看着上面的那张图,从上至下、从左至右遍历:
第一层:6
第二层:2、8
第三层:0、4、7、9
第四层:null、null、3、5
合起来就是这么一个 层序遍历 数组:[6, 2, 8, 0, 4, 7, 9, null, null, 3, 5]
层次遍历序列,中间如果有空节点,必须用
null
表示
层序建树工具类
只要把层序遍历数组输入进去,建树就自己完成了
import java.util.LinkedList;
import java.util.Queue;
import org.junit.Test;
/*
* build a tree
*/
public class TreeMaker {
/**
* 二叉树 层序 遍历数组 建树
*/
public static TreeNode build(Integer[] trees) {
if (trees == null || trees.length == 0) {
return null;
}
// 队列里面存储节点
Queue<TreeNode> queue = new LinkedList<TreeNode>();
int index = 0;
// 先存入一个根节点
TreeNode root = new TreeNode(trees[index++]);
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
while (size-- > 0) {
if(index == trees.length) {
queue.clear();
break;
}
TreeNode node = queue.poll();
if(node == null) {
continue;
}
node.left = trees[index]==null?null:new TreeNode(trees[index]);
index++;
queue.offer(node.left);
node.right = trees[index]==null?null:new TreeNode(trees[index]);
index++;
queue.offer(node.right);
}
}
return root;
}
// JUnit 单元测试
@Test
public void testTreeMaker() {
Integer[] trees = { 3, 9, 20, null, null, 15, 7 };
TreeNode root = TreeMaker.build(trees);
System.out.println(root.val);
}
}
// 二叉树的定义
class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
TreeNode(int x) {
val = x;
}
}
为什么要建立一颗二叉树呢,当然是为了方便进行二叉树的各种骚操作啊。
附赠 二叉树三种遍历方式(前序/中序/后序) 的 Java 实现代码 :【垒实基础 二叉树的遍历(Java 版)】