从数组通过反前序遍历的方式建立二叉树:
给出的数组:{“A”,“B”,“D”,"#","#",“E”,"#","#",“C”,"#",“F”,"#","#"},将该数组序列转化为下图所示,
public void creatBinaryTreePre(ArrayList<String> data){
creatBinaryTreePre(data.size(),data);
}
public TreeNode1 creatBinaryTreePre(int size, ArrayList<String> data){
if(data.size() == 0){ //如果传入数组大小为0,返回空
return null;
}
String d = data.get(0); //将数组的第一个元素赋值给d
TreeNode1 node;
int index = size - data.size(); //为当前元素d的索引
if(d.equals("#")){ //如果元素d为“#”,则则该节点为null,并移除该元素
node = null;
data.remove(0);
return node;
}
node = new TreeNode1(index,d); //如果元素d不为“#”,则将该index与d组成新的节点
if(index == 0){ //如果index为0,则为跟节点
root = node;
}
data.remove(0); //移除数组中第一个值
node.leftChild = creatBinaryTreePre(size,data); //继续遍历数组,得到跟节点的左子树size的值不变
node.rightChild = creatBinaryTreePre(size,data); //继续遍历数组,得到跟节点的左子树size的值不变
return node;
}
public static void main(String args[]){
BinaryTree binarytree = new BinaryTree();
binarytree.creatBinaryTree();
ArrayList<String> data = new ArrayList<>(); //创建数组列表
String[] dataArray = new String[]{"A","B","D","#","#","E","#","#","C","#","F","#","#"}; //定义一个数组
for(String i : dataArray){ //将数组的值添加到数组列表中
data.add(i);
}
binarytree.creatBinaryTreePre(data); //利用反前序遍历建立一颗二叉树
binarytree.preOrder(binarytree.root); //利用前序遍历打印二叉树
最后的输出为: