您的位置:首页 > 科技 > 能源 > 数据结构--二叉树收尾

数据结构--二叉树收尾

2024/12/26 20:43:31 来源:https://blog.csdn.net/XSTIT/article/details/140271947  浏览:    关键词:数据结构--二叉树收尾

1.二叉树销毁

运用递归方法

分类:

根节点+左子树+右子树(一般都是这个思路,不断进行递归即可)

选择方法(分析):

前序:如果直接销毁根就无法找到左子树右子树

中序:也会导致丢失其他数据

因此需要选择后序(遇到根不销毁,先销毁左子树,左边销毁完再销毁右子树,最后销毁根)

//二叉树销毁
void TreeDestory(BTNode* root);
{//首先判断是否为空if (root == NULL)return;TreeDestory(root->left);TreeDestory(root->right);//释放节点free(root);
}

2.层序遍历(一种BFS)

DFS:例如前中后序。

BFS:例如层序遍历

以根为起点然后一层一层向下走。

逻辑:上一层带下一层

层序都是用队列来进行辅助完成的。(属于队列的运用)

队列实现图:

出队头,空不进。

  

代码实现

1.依靠队列来完成因此首先需要将队列的头文件源文件实现添加进来

将其复制过来

粘贴进去就可。

注意:1.队列里边应该存节点还是存值?

首先不能存值如果只有值的话肯定通过一个数据无法找到其他数据

存节点又占用太大,因此可以存节点的指针

2.typedef后面不用BTNode*

如果用BTNode*,编译器不认识,因此需要用原类型,先这样理解就好

//2.层序遍历 
#include"Queue.h"
void TreeLevelOrder(BTNode* root)
{Queue q;//定义一个队列QueueInit(&q);if (root)QueuePush(&q, root);while (!QueueEmpty(&q))//判空如果不是空的话就继续,{//先取对头数据BTNode* front = QueueFront(&q)QueuePop(&q);printf("%d", front->data);//打印出的是数字if (front->left)QueuePush(&q, front->left);if (front->right)QueuePush(&q, front->right);}QueueDestroy(&q);
}

注意:

之所以QueuePop(&q);后还可以     printf("%d", front->data);是因为Pop掉的是队列的头节点,但是树的依然存在不影响

     
  已经传给front了,所以依然可以找到。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com