算法打卡(三)-----带NULL的二叉树创建精讲

前言:

在我们日常的二叉树的算法中,首先就是需要创建一个二叉树,而我们在算法中通常需要创建的二叉树又是带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 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_44762290/article/details/113276703
今日推荐