前言:
在我们日常的二叉树的算法中,首先就是需要创建一个二叉树,而我们在算法中通常需要创建的二叉树又是带NULL的,特别是我们在刷力扣算法题的时候,基本上需要创建的都是带NULL的二叉树创建。
我们可以看到这里的数组是带有NULL的,所以我们这里如何创建这样的数组。
带NULL的二叉树创建:
这里我们创建二叉树使用的是一层一层的创建。
public void creatBT(String[] arr){}
这里的arr[] 是需要创建二叉树的数组我们这里使用的数组{“A”,“B”,“C”,“D”,NULL,“E”,“F”};
- 首先我们创建一个节点类
public class TreeNode {
String datas;
TreeNode left;
TreeNode right;
public TreeNode(String data){
this.datas=data;
}
}
- 这里我们创建一个节点数组用于保存数组节点
TreeNode[] treeNodes=new TreeNode[arr.length];
这里我们创建一个节点数组用于保存节点。
- 我们开始遍历创建二叉树
我们这里是一层一层的创建二叉树,所以我们需要创建一个变量用于记录我们所处于的层,创建一个变量用于记录我们遍历的节点个数。
int count=0; //用于记录已经遍历创建的节点个数
int floor=0; //记录二叉树的层数
代码
节点类 TreeNode
public class TreeNode {
String datas;
TreeNode left;
TreeNode right;
public TreeNode(String data){
this.datas=data;
}
二叉树创建
public void creatBT(String[] arr){
if(arr.length==0||arr[0]==null)return;
int count=0;
int floor=0;
TreeNode[] treeNodes=new TreeNode[arr.length];
//这个是以层序遍历的方式来进行二叉树的创建,也就是一层一层的创建
while(count<arr.length){
int start=(int)Math.pow(2,floor)-1;
int end=(int)Math.pow(2,floor+1)-1;
if(end>arr.length) end=arr.length;
for(int i=start;i<end;i++){
if(arr[i]==null) treeNodes[i]=null;
else treeNodes[i]=new TreeNode(arr[i]);
//通过父节点来进行子节点的添加操作
if(i>0){
int parent=(i-1)/2;
TreeNode pNode=treeNodes[parent];
if(pNode!=null){
if(i%2==1){
pNode.left=treeNodes[i];
}else{
pNode.right=treeNodes[i];
}
}
}
count++;
}
floor++;
}
root=treeNodes[0]; //给根节点进行赋值操作
}
扫描二维码关注公众号,回复:
12466322 查看本文章
