当前位置:   article > 正文

二叉树的创建销毁和如何层序遍历_二叉树的销毁

二叉树的销毁

大家好!前面的二叉树的学习,我们都是先手动构建二叉树的,这篇就说一下如何真正的去构建一棵二叉树。而且,我还会说一下前面没有说的一种遍历方式:层序遍历。
在这里插入图片描述

如何层序遍历

我们要进行层序遍历,要借助一个数据结构——队列。
思路:
1.先把根入队列,借助队列先进先出的性质。
2.上一层节点出的时候,带下一层的节点进去。

下面,我举个例子:
在这里插入图片描述
首先,我将1放到队列中:
在这里插入图片描述
我们看队列不为空,我们将1取出来,然后把它的孩子2和4带进去。
在这里插入图片描述
我们看队列不为空,我们将2取出来,然后把它的孩子3带进去,NULL就不进去了。
在这里插入图片描述
我们看队列不为空,我们将4取出来,然后把它的孩子5和6带进去
在这里插入图片描述
队列不为空,我们将3取出来,它的孩子都是NULL,不进去
在这里插入图片描述
队列不为空,我们将5取出来,它的孩子都是NULL,不进去
在这里插入图片描述
队列不为空,我们将6取出来,它的孩子都是NULL,不进去
在这里插入图片描述
当队列为空就结束了。

代码如下:
在这里插入图片描述

在这里插入图片描述

判断二叉树是否是完全二叉树

我们知道完全二叉树前n-1层是满的,最后一层是连续的。
那我们该如何判断呢?用的就是上面层序遍历的思想。
解题思路:
1.层序遍历,NULL也进队列
2.遇到NULL以后,出队列中所有数据。如果全是NULL,就是完全二叉树,如果有非NULL,就不是。

就看上面举的例子:
在这里插入图片描述
在这里插入图片描述
你会发现,当遇到NULL时,后面还有5,6,那么就说明不是完全二叉树。

那么如果是这样的一个二叉树:
在这里插入图片描述
你就会发现当遇到NULL时,后面全是NULL:
在这里插入图片描述
这样,我们用代码来实现:
在这里插入图片描述

二叉树的创建

那么一个二叉树我们该如何真正的去创建呢?
我来举个例子:
在这里插入图片描述
假设,我们用前序遍历的方式来创建这个二叉树,#号代表NULL。
构建的二叉树应该是这个样子:
在这里插入图片描述
代码如下:

typedef struct BrinyTreeNode
{
    struct BrinyTreeNode* left;
    struct BrinyTreeNode* right;
    char data;
}BTNode;

BTNode* CreateTree(char* arr,int* pi)
{
    //当遇到NULL时,就返回
    if(arr[(*pi)]=='#')
    {
        (*pi)++;
        return NULL;
    }
	//如果不是NULL,就开辟节点的空间
    BTNode* root=(BTNode*)malloc(sizeof(BTNode));
    
    root->data=arr[(*pi)++];
 	//递归到左边右边,连接起来
    root->left=CreateTree(arr,pi);
    root->right=CreateTree(arr,pi);
    
    return root;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

二叉树的销毁

二叉树的销毁只能是后序遍历,如果是前序和中序的话,那么根会先销毁,就找不到它的孩子了。

代码如下:

void BTreeDestory(BTNode* root)
{
	if (root == NULL)
	{
		return;
	}

	BTreeDestory(root->left);
	BTreeDestory(root->right);
	free(root);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

如果大家觉得有帮助,希望能够多多支持!谢谢大家!
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/622007
推荐阅读
相关标签
  

闽ICP备14008679号