数据结构(27)二叉树的操作
来源:互联网 发布:js选中input内容 编辑:程序博客网 时间:2024/05/19 23:00
今天来介绍下二叉树的4种遍历方式,如果对二叉树不熟悉的话,请先去本系列二叉树的介绍中先学习。
遍历:单链表的遍历是指从第一个结点开始(下标为0的结点),按照某种次序依次访问每一个结点。
二叉树的遍历是指从根结点开始,按照某种次序依次访问二叉树中的所有结点。
OK,下面就分别介绍前序遍历,中序遍历,后序遍历,层次遍历
代码:
- void pre_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- printf("%c, ", ((Node*)root)->v);
- pre_order_traversal(root->left);
- pre_order_traversal(root->right);
- }
- }
代码:
- void middle_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- middle_order_traversal(root->left);
- printf("%c, ", ((Node*)root)->v);
- middle_order_traversal(root->right);
- }
- }
代码:
- void post_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- post_order_traversal(root->left);
- post_order_traversal(root->right);
- printf("%c, ", ((Node*)root)->v);
- }
- }
代码:
- void level_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- LinkQueue* queue = LinkQueue_Create();
- if(NULL != queue)
- {
- LinkQueue_Append(queue, root);
- while(0 < LinkQueue_Length(queue))
- {
- Node* node = (Node*)LinkQueue_Retrieve(queue);
- printf("%c, ", node->v);
- LinkQueue_Append(queue, node->header.left);
- LinkQueue_Append(queue, node->header.right);
- }
- }
- LinkQueue_Destroy(queue);
- }
- }
线索化二叉树指的是将二叉树中的结点进行逻辑意义上的“重排列”,使其可以线性的方式访问每一个结点。二叉树线索化之后每个结点都有一个线性下标,通过这个下标可以快速访问结点,而不需要遍历二叉树。
代码:
- void thread_via_left(BTreeNode* root, BTreeNode** pp)
- {
- if((NULL!=root) && (NULL!=pp))
- {
- if(NULL != (*pp))
- {
- (*pp)->left = root;
- *pp = NULL;
- }
- if(NULL == root->left)
- {
- *pp = root;
- }
- thread_via_left(root->left, pp);
- thread_via_left(root->right, pp);
- }
- }
代码:
- void thread_via_list(BTreeNode* root, SeqList* list)
- {
- if((NULL!=root) && (NULL!=list))
- {
- SeqList_Insert(list, (SeqListNode*)root, SeqList_Length(list));
- thread_via_list(root->left, list);
- thread_via_list(root->right, list);
- }
- }
最后做一下小结:
0 0
- 数据结构(27)二叉树的操作
- (数据结构)二叉树的基本操作
- 数据结构(十二) 二叉树的基本操作 --- 创建一个二叉树 前中后序遍历二叉树
- 数据结构-二叉树操作
- 二叉树操作--数据结构
- 数据结构二叉树操作
- 数据结构二叉树操作
- 二叉树的操作 (数据结构c语言)
- 数据结构:二叉搜索树(BST)的基本操作
- 【数据结构】二叉树的操作2
- 数据结构之二叉树的基本操作
- [数据结构] 二叉树的操作实现
- 数据结构关于二叉树的操作
- 数据结构 二叉搜索树的相关操作
- 数据结构——二叉树的操作
- 数据结构 二叉树大部分操作的实现
- 【数据结构】二叉树的基本操作
- 数据结构和二叉树操作的封装
- 行为类模式-访问者模式(12)
- ACdream 1726
- barrier_breaker14.07交叉编译libcurl并打包
- 可视化编程
- 第一次使用vim遇到的问题及常用方法
- 数据结构(27)二叉树的操作
- 第一章谢菲尔德大学的MATLAB遗传算法工具箱(一)
- iOS中多线程原理与runloop介绍
- Android Studio 快捷键的设置
- git版本控制
- cookie 二级域名共享
- adb logcat命令查看并过滤android输出log
- 详解网站WEB日志格式
- 内核概念-内核