您的位置:首页 > 编程语言 > C语言/C++

二叉查找树(一)之 图文解析 和 C语言的实现

2014-03-27 09:43 1006 查看

概要

本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现。关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单。初次接触树的时候,我也觉得它似乎很难;而之所产生这种感觉主要是由于二叉树有一大堆陌生的概念、性质等内容。而当我真正的实现了二叉树再回过头来看它的相关概念和性质的时候,觉得原来它是如此的简单!因此,建议在学习二叉树的时候:先对二叉树基本的概念、性质有个基本了解,遇到难懂的知识点,可以画图来帮助理解;在有个基本的概念之后,再亲自动手实现二叉查找树(这一点至关重要!);最后再回过头来总结一下二叉树的理论知识时,你会发现——它的确很简单!在代码实践中,我以"二叉查找树,而不是单纯的二叉树"为例子进行说明,单纯的二叉树非常简单,实际使用很少。况且掌握了二叉查找树,二叉树也就自然掌握了。

本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。您可以根据自己熟悉的语言进行实践学习!

请务必深刻理解、实践并掌握"二叉查找树"!它是后面学习AVL树、伸展树、红黑树等相关树结构的基石!

目录
1. 树的介绍
2. 二叉树的介绍
3. 二叉查找树的C实现
4. 二叉查找树的C测试程序

转载请注明出处:https://www.geek-share.com/detail/2606884581.html

更多内容: 数据结构与算法系列 目录

(01). 二叉查找树(一)之 图文解析 和 C语言的实现
(02). 二叉查找树(二)之 C++的实现
(03). 二叉查找树(三)之 Java的实现


树的介绍

1. 树的定义

树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。

/**
* C 语言: 二叉查找树
*
* @author skywang
* @date 2013/11/07
*/

#include <stdio.h>
#include "bstree.h"

static int arr[]= {1,5,4,3,2,6};
#define TBL_SIZE(a) ( (sizeof(a)) / (sizeof(a[0])) )

void main()
{
int i, ilen;
BSTree root=NULL;

printf("== 依次添加: ");
ilen = TBL_SIZE(arr);
for(i=0; i<ilen; i++)
{
printf("%d ", arr[i]);
root = insert_bstree(root, arr[i]);
}

printf("\n== 前序遍历: ");
preorder_bstree(root);

printf("\n== 中序遍历: ");
inorder_bstree(root);

printf("\n== 后序遍历: ");
postorder_bstree(root);
printf("\n");

printf("== 最小值: %d\n", bstree_minimum(root)->key);
printf("== 最大值: %d\n", bstree_maximum(root)->key);
printf("== 树的详细信息: \n");
print_bstree(root, root->key, 0);

printf("\n== 删除根节点: %d", arr[3]);
root = delete_bstree(root, arr[3]);

printf("\n== 中序遍历: ");
inorder_bstree(root);
printf("\n");

// 销毁二叉树
destroy_bstree(root);
}


View Code

二叉查找树的C测试程序

上面的btree_test.c是二叉查找树的测试程序,它的运行结果如下:

== 依次添加: 1 5 4 3 2 6
== 前序遍历: 1 5 4 3 2 6
== 中序遍历: 1 2 3 4 5 6
== 后序遍历: 2 3 4 6 5 1
== 最小值: 1
== 最大值: 6
== 树的详细信息:
1 is root
5 is  1's  right child
4 is  5's   left child
3 is  4's   left child
2 is  3's   left child
6 is  5's  right child

== 删除根节点: 3
== 中序遍历: 1 2 4 5 6


下面对测试程序的流程进行分析!

(01) 新建"二叉查找树"root。

(02) 向二叉查找树中依次插入1,5,4,3,2,6 。如下图所示:





(03) 打印树的信息
插入1,5,4,3,2,6之后,得到的二叉查找树如下:





前序遍历结果: 1 5 4 3 2 6
中序遍历结果: 1 2 3 4 5 6
后序遍历结果: 2 3 4 6 5 1
最小值是1,而最大值是6。

(04) 删除节点3。如下图所示:





(05) 重新遍历该二叉查找树。
中序遍历结果: 1 2 4 5 6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: