前序法
二叉树的结点域参考:https://blog.youkuaiyun.com/qq_41044665/article/details/81157960
/***先补成一个完全二叉树
* 采用前序创建
* a
* b c
* d e # f
* # # # # # #
*
* 前序访问:abd##e##c#f##
* data为:abd##e##c#f##
* 采用ArrayList 取出删除相当于一个队列
*/
public void createBinaryTreePre(ArrayList<String> data){
createBinaryTree(data.size(),data);
}
public TreeNode createBinaryTree(int size,ArrayList<String> data){
if (data.size()==0){
return null;
}
// 先取出一个元素
String d = data.get(0);
int index = size - data.size(); //计算当前节点编号
if (d.equals("#")){ //如果是“#”则代表没有该节点
data.remove(0); // 但是还是得删除-->该子树分支就没有了,但还有其他子树需要构建(迭代)
return null;
}
TreeNode treeNode = new TreeNode(index,d); //构建节点
System.out.println(treeNode.data);
if (index == 0){ //如果index==0 证明是第一个节root
root = treeNode ;
}
data.remove(0); //开始下一个节点
treeNode.leftChild = createBinaryTree(size,data);
treeNode.rifhtChild = createBinaryTree(size,data);
return treeNode;
}