H_405_-29221请大家帮忙解下,这个数字是什么,谢谢

<h3 class="form-title" data-v-6b秒快速估算装修报价㎡立即计算那个我要买一苹果的平板电脑,就是叫做IPAD什么的,但我又搞不清楚到底哪个好,请诸位帮我推荐下吧。谢谢3个回答绫濑知番买3g的wduser_原封的就是 还没拆的 包装盒上的 膜也没 撕了 这个 一般是全新的 配件也不会被 换了。
拆封装软件就是 替你拆封 后 在 ipad 里装了很多软件 因为 苹果的 很多软件 要钱 。商家有时候搞促销 就帮你安装了 要钱的软件 但是这种有个问题就是 apple账号问题 帮你安装的软件不能用你自己申请的账号升级 。一般还是买原装的好 。 3G版 就是除了可以用wifi 上无线网外 还可以插 手机 sim 卡 上网,但是要额外给钱,找联通办一个就行 。 wifi的是没有3G功能的ipad 你看电影 就买 wifi的就行了 便宜1000和3G的比 要是你用 3G网看电影 流量很高的 价格也很贵wduser_坚决买wifi版,家里工作地用无线连接直接看电影。16g就可以了,电影可以放好多了。其他也是浪费。买3g版看电影,简直无底洞,流量直接超支的。热门问答1234567891011121314151617181920查看更多21222324252627282930相关问答1个回答wduser_可以去与手机绑定银行卡的对应银行打印明细 如显示到账 那就可以要求她还钱了2个回答wduser_只愿得一人心,白首不相离2个回答wduser_谁晓我之情,解我之迷,惹六月雪伤。 谁知我之意,道我之想,记初见不忘。 谁懂我哀愁,破我之心,把温酒变凉。 谁执我之手,吻我之眸,将风华淡忘。 谁守我一生,护我一世,使岁月悠长。2个回答wduser_谁晓我之情,解我之迷,惹六月雪伤。 谁知我之意,道我之想,记初见不忘。 谁懂我哀愁,破我之心,把温酒变凉。 谁执我之手,吻我之眸,将风华淡忘。 谁守我一生,护我一世,使岁月悠长。2个回答wduser_只愿得一人心,白首不相离2个回答wduser_谁晓我之情,解我之迷,惹六月雪伤。 谁知我之意,道我之想,记初见不忘。 谁懂我哀愁,破我之心,把温酒变凉。 谁执我之手,吻我之眸,将风华淡忘。 谁守我一生,护我一世,使岁月悠长。2个回答wduser_谁晓我之情,解我之迷,惹六月雪伤。 谁知我之意,道我之想,记初见不忘。 谁懂我哀愁,破我之心,把温酒变凉。 谁执我之手,吻我之眸,将风华淡忘。 谁守我一生,护我一世,使岁月悠长。6个回答wduser_一般说在的好7个回答wduser_先反问一下她在不在,跟据他的回答来回答,如回在,则回在,如回不在,则回不在,有时生活需要交际中的一些手腕。6个回答wduser_说在,反正女人不知道。测黄道吉日抢平台优惠本文转载至http://www.cnblogs.com/skywang12345/p/3576328.html
& & & &本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现。关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单。初次接触树的时候,我也觉得它似乎很难;而之所产生这种感觉主要是由于二叉树有一大堆陌生的概念、性质等内容。而当我真正的实现了二叉树再回过头来看它的相关概念和性质的时候,觉得原来它是如此的简单!因此,建议在学习二叉树的时候:先对二叉树基本的概念、性质有个基本了解,遇到难懂的知识点,可以画图来帮助理解;在有个基本的概念之后,再亲自动手实现二叉查找树(这一点至关重要!);最后再回过头来总结一下二叉树的理论知识时,你会发现——它的确很简单!在代码实践中,我以”二叉查找树,而不是单纯的二叉树”为例子进行说明,单纯的二叉树非常简单,实际使用很少。况且掌握了二叉查找树,二叉树也就自然掌握了。
& & & 本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。您可以根据自己熟悉的语言进行实践学习!
& & & 请务必深刻理解、实践并掌握”二叉查找树”!它是后面学习AVL树、伸展树、红黑树等相关树结构的基石!
目录1.&2.&3.&4.&
转载请注明出处:
更多内容:&&
(01).&(02).&(03).&
1. 树的定义
树是一种数据结构,它是由n(n&=1)个有限节点组成一个具有层次关系的集合。
把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:(01) 每个节点有零个或多个子节点;(02) 没有父节点的节点称为根节点;(03) 每一个非根节点有且只有一个父节点;(04) 除了根节点外,每个子节点可以分为多个不相交的子树。
2. 树的基本术语
若一个结点有子树,那么该结点称为子树根的”双亲”,子树的根是该结点的”孩子”。有相同双亲的结点互为”兄弟”。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。
结点的度:结点拥有的子树的数目。叶子:度为零的结点。分支结点:度不为零的结点。树的度:树中结点的最大的度。
层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1。树的高度:树中结点的最大层次。无序树:如果树中结点的各子树之间的次序是不重要的,可以交换位置。有序树:如果树中结点的各子树之间的次序是重要的, 不可以交换位置。森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。
二叉树的介绍
1. 二叉树的定义
二叉树是每个节点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
2. 二叉树的性质
二叉树有以下几个性质:TODO(上标和下标)性质1:二叉树第i层上的结点数目最多为&2{i-1}&(i≥1)。性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。性质3:包含n个结点的二叉树的高度至少为log2&(n+1)。性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
2.1 性质1:二叉树第i层上的结点数目最多为&2{i-1}&(i≥1)
证明:下面用”数学归纳法”进行证明。& & & & (01) 当i=1时,第i层的节点数目为2{i-1}=2{0}=1。因为第1层上只有一个根结点,所以命题成立。& & & & (02) 假设当i&1,第i层的节点数目为2{i-1}。这个是根据(01)推断出来的!& & & & & & & &下面根据这个假设,推断出”第(i+1)层的节点数目为2{i}“即可。& & & & & & & & 由于二叉树的每个结点至多有两个孩子,故”第(i+1)层上的结点数目” 最多是 “第i层的结点数目的2倍”。即,第(i+1)层上的结点数目最大值=2×2{i-1}=2{i}。& & & & & & & & 故假设成立,原命题得证!
2.2 性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)
证明:在具有相同深度的二叉树中,当每一层都含有最大结点数时,其树中结点数最多。利用”性质1”可知,深度为k的二叉树的结点数至多为:& & & & & &20+21+…+2k-1=2k-1& & & & & &故原命题得证!
2.3 性质3:包含n个结点的二叉树的高度至少为log2&(n+1)
证明:根据”性质2”可知,高度为h的二叉树最多有2{h}–1个结点。反之,对于包含n个节点的二叉树的高度至少为log2(n+1)。
2.4 性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1
证明:因为二叉树中所有结点的度数均不大于2,所以结点总数(记为n)=”0度结点数(n0)” + “1度结点数(n1)” + “2度结点数(n2)”。由此,得到等式一。& & & & &(等式一)&n=n0+n1+n2  & & 另一方面,0度结点没有孩子,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是:n1+2n2。此外,只有根不是任何结点的孩子。故二叉树中的结点总数又可表示为等式二。& & & & &(等式二)&n=n1+2n2+1& & & & 由(等式一)和(等式二)计算得到:n0=n2+1。原命题得证!
3. 满二叉树,完全二叉树和二叉查找树
3.1 满二叉树
定义:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。
3.2 完全二叉树
定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上。这样的二叉树称为完全二叉树。特点:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而完全二叉树未必是满二叉树。
3.3 二叉查找树
定义:二叉查找树(Binary Search Tree),又被称为二叉搜索树。设x为二叉查找树中的一个结点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[y] &= key[x];如果y是x的右子树的一个结点,则key[y] &= key[x]。
在二叉查找树中:(01) 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(02) 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(03) 任意节点的左、右子树也分别为二叉查找树。(04) 没有键值相等的节点(no duplicate nodes)。
在实际应用中,二叉查找树的使用比较多。下面,用C语言实现二叉查找树。
二叉查找树的C实现
1. 节点定义
1.1 节点定义
typedef int T
typedef struct BSTreeNode{
// 关键字(键值)
struct BSTreeNode *
struct BSTreeNode *
struct BSTreeNode *
}Node, *BST
二叉查找树的节点包含的基本信息:(01) key & & &
– 它是关键字,是用来对二叉查找树的节点进行排序的。(02) left & & &
– 它指向当前节点的左孩子。(03) right& & – 它指向当前节点的右孩子。(04) parent – 它指向当前节点的父结点。
1.2 创建节点
创建节点的代码
static Node* create_bstree_node(Type key, Node *parent, Node *left, Node* right)
if ((p = (Node *)malloc(sizeof(Node))) == NULL)
return NULL;
p-&right =
p-&parent =
这里讲解前序遍历、中序遍历、后序遍历3种方式。
2.1 前序遍历
若二叉树非空,则执行以下操作:(01) 访问根结点;(02) 先序遍历左子树;(03) 先序遍历右子树。
前序遍历代码
void preorder_bstree(BSTree tree)
if(tree != NULL)
printf("%d ", tree-&key);
preorder_bstree(tree-&left);
preorder_bstree(tree-&right);
2.2 中序遍历
若二叉树非空,则执行以下操作:(01) 中序遍历左子树;(02) 访问根结点;(03) 中序遍历右子树。
中序遍历代码
void inorder_bstree(BSTree tree)
if(tree != NULL)
inorder_bstree(tree-&left);
printf("%d ", tree-&key);
inorder_bstree(tree-&right);
2.3 后序遍历
若二叉树非空,则执行以下操作:(01) 后序遍历左子树;(02) 后序遍历右子树;(03) 访问根结点。
后序遍历代码
void postorder_bstree(BSTree tree)
if(tree != NULL)
postorder_bstree(tree-&left);
postorder_bstree(tree-&right);
printf("%d ", tree-&key);
下面通过例子对这些遍历方式进行介绍。
对于上面的二叉树而言,(01) 前序遍历结果: 3 1 2 5 4 6(02) 中序遍历结果: 1 2 3 4 5 6&(03) 后序遍历结果: 2 1 4 6 5 3
递归版本的代码
Node* bstree_search(BSTree x, Type key)
if (x==NULL || x-&key==key)
if (key & x-&key)
return bstree_search(x-&left, key);
return bstree_search(x-&right, key);
非递归版本的代码
Node* iterative_bstree_search(BSTree x, Type key)
while ((x!=NULL) && (x-&key!=key))
if (key & x-&key)
4. 最大值和最小值
查找最大值的代码
Node* bstree_maximum(BSTree tree)
if (tree == NULL)
return NULL;
while(tree-&right != NULL)
tree = tree-&
查找最小值的代码
Node* bstree_minimum(BSTree tree)
if (tree == NULL)
return NULL;
while(tree-&left != NULL)
tree = tree-&
5. 前驱和后继
节点的前驱:是该节点的左子树中的最大节点。节点的后继:是该节点的右子树中的最小节点。
查找前驱节点的代码
Node* bstree_predecessor(Node *x)
// 如果x存在左孩子,则"x的前驱结点"为 "以其左孩子为根的子树的最大结点"。
if (x-&left != NULL)
return bstree_maximum(x-&left);
// 如果x没有左孩子。则x有以下两种可能:
// (01) x是"一个右孩子",则"x的前驱结点"为 "它的父结点"。
// (01) x是"一个左孩子",则查找"x的最低的父结点,并且该父结点要具有右孩子",找到的这个"最低的父结点"就是"x的前驱结点"。
Node* y = x-&
while ((y!=NULL) && (x==y-&left))
查找后继节点的代码
Node* bstree_successor(Node *x)
// 如果x存在右孩子,则"x的后继结点"为 "以其右孩子为根的子树的最小结点"。
if (x-&right != NULL)
return bstree_minimum(x-&right);
// 如果x没有右孩子。则x有以下两种可能:
// (01) x是"一个左孩子",则"x的后继结点"为 "它的父结点"。
// (02) x是"一个右孩子",则查找"x的最低的父结点,并且该父结点要具有左孩子",找到的这个"最低的父结点"就是"x的后继结点"。
Node* y = x-&
while ((y!=NULL) && (x==y-&right))
插入节点的代码
static Node* bstree_insert(BSTree tree, Node *z)
Node *y = NULL;
// 查找z的插入位置
while (x != NULL)
if (z-&key & x-&key)
z-&parent =
if (y==NULL)
else if (z-&key & y-&key)
y-&right =
Node* insert_bstree(BSTree tree, Type key)
// 新建结点
// 如果新建结点失败,则返回。
if ((z=create_bstree_node(key, NULL, NULL, NULL)) == NULL)
return bstree_insert(tree, z);
bstree_insert(tree, z)是内部函数,它的作用是:将结点(z)插入到二叉树(tree)中,并返回插入节点后的根节点。insert_bstree(tree, key)是对外接口,它的作用是:在树中新增节点,key是节点的值;并返回插入节点后的根节点。
注:本文实现的二叉查找树是允许插入相同键值的节点的!若用户不希望插入相同键值的节点,将bstree_insert()修改为以下代码即可。
static Node* bstree_insert(BSTree tree, Node *z)
Node *y = NULL;
// 查找z的插入位置
while (x != NULL)
if (z-&key & x-&key)
if (z-&key & x-&key)
free(z); // 释放之前分配的系统。
z-&parent =
if (y==NULL)
else if (z-&key & y-&key)
y-&right =
删除节点的代码
static Node* bstree_delete(BSTree tree, Node *z)
Node *x=NULL;
Node *y=NULL;
if ((z-&left == NULL) || (z-&right == NULL) )
y = bstree_successor(z);
if (y-&left != NULL)
if (x != NULL)
x-&parent = y-&
if (y-&parent == NULL)
else if (y == y-&parent-&left)
y-&parent-&left =
y-&parent-&right =
if (y != z)
z-&key = y-&
if (y!=NULL)
Node* delete_bstree(BSTree tree, Type key)
Node *z, *
if ((z = bstree_search(tree, key)) != NULL)
tree = bstree_delete(tree, z);
bstree_delete(tree, z)是内部函数,它的作用是:删除二叉树(tree)中的节点(z),并返回删除节点后的根节点。delete_bstree(tree, key)是对外接口,它的作用是:在树中查找键值为key的节点,找到的话就删除该节点;并返回删除节点后的根节点。
打印二叉树的代码
void print_bstree(BSTree tree, Type key, int direction)
if(tree != NULL)
if(direction==0)
// tree是根节点
printf("%2d is root\n", tree-&key);
// tree是分支节点
printf("%2d is %2d's %6s child\n", tree-&key, key, direction==1?"right" : "left");
print_bstree(tree-&left, tree-&key, -1);
print_bstree(tree-&right,tree-&key,
print_bstree(tree, key, direction)的作用是打印整颗二叉树(tree)。其中,tree是二叉树节点,key是二叉树的键值,而direction表示该节点的类型:
direction为 0,表示该节点是根节点;direction为-1,表示该节点是它的父结点的左孩子;direction为&1,表示该节点是它的父结点的右孩子。
9. 销毁二叉树
销毁二叉树的代码
void destroy_bstree(BSTree tree)
if (tree==NULL)
if (tree-&left != NULL)
destroy_bstree(tree-&left);
if (tree-&right != NULL)
destroy_bstree(tree-&right);
free(tree);
完整的实现代码
二叉查找树的头文件(bstree.h)
1 #ifndef _BINARY_SEARCH_TREE_H_
2 #define _BINARY_SEARCH_TREE_H_
4 typedef int T
6 typedef struct BSTreeNode{
// 关键字(键值)
struct BSTreeNode *
struct BSTreeNode *
struct BSTreeNode *
11 }Node, *BST
13 // 前序遍历"二叉树"
14 void preorder_bstree(BSTree tree);
15 // 中序遍历"二叉树"
16 void inorder_bstree(BSTree tree);
17 // 后序遍历"二叉树"
18 void postorder_bstree(BSTree tree);
20 // (递归实现)查找"二叉树x"中键值为key的节点
21 Node* bstree_search(BSTree x, Type key);
22 // (非递归实现)查找"二叉树x"中键值为key的节点
23 Node* iterative_bstree_search(BSTree x, Type key);
25 // 查找最小结点:返回tree为根结点的二叉树的最小结点。
26 Node* bstree_minimum(BSTree tree);
27 // 查找最大结点:返回tree为根结点的二叉树的最大结点。
28 Node* bstree_maximum(BSTree tree);
30 // 找结点(x)的后继结点。即,查找"二叉树中数据值大于该结点"的"最小结点"。
31 Node* bstree_successor(Node *x);
32 // 找结点(x)的前驱结点。即,查找"二叉树中数据值小于该结点"的"最大结点"。
33 Node* bstree_predecessor(Node *x);
35 // 将结点插入到二叉树中,并返回根节点
36 Node* insert_bstree(BSTree tree, Type key);
38 // 删除结点(key为节点的值),并返回根节点
39 Node* delete_bstree(BSTree tree, Type key);
41 // 销毁二叉树
42 void destroy_bstree(BSTree tree);
44 // 打印二叉树
45 void print_bstree(BSTree tree, Type key, int direction);
二叉查找树的实现文件(bstree.c)
* 二叉搜索树(C语言): C语言实现的二叉搜索树。
* @author skywang
8 #include &stdio.h&
9 #include &stdlib.h&
10 #include "bstree.h"
* 前序遍历"二叉树"
16 void preorder_bstree(BSTree tree)
if(tree != NULL)
printf("%d ", tree-&key);
preorder_bstree(tree-&left);
preorder_bstree(tree-&right);
* 中序遍历"二叉树"
29 void inorder_bstree(BSTree tree)
if(tree != NULL)
inorder_bstree(tree-&left);
printf("%d ", tree-&key);
inorder_bstree(tree-&right);
* 后序遍历"二叉树"
42 void postorder_bstree(BSTree tree)
if(tree != NULL)
postorder_bstree(tree-&left);
postorder_bstree(tree-&right);
printf("%d ", tree-&key);
* (递归实现)查找"二叉树x"中键值为key的节点
55 Node* bstree_search(BSTree x, Type key)
if (x==NULL || x-&key==key)
if (key & x-&key)
return bstree_search(x-&left, key);
return bstree_search(x-&right, key);
* (非递归实现)查找"二叉树x"中键值为key的节点
69 Node* iterative_bstree_search(BSTree x, Type key)
while ((x!=NULL) && (x-&key!=key))
if (key & x-&key)
* 查找最小结点:返回tree为根结点的二叉树的最小结点。
85 Node* bstree_minimum(BSTree tree)
if (tree == NULL)
return NULL;
while(tree-&left != NULL)
tree = tree-&
* 查找最大结点:返回tree为根结点的二叉树的最大结点。
98 Node* bstree_maximum(BSTree tree)
if (tree == NULL)
return NULL;
while(tree-&right != NULL)
tree = tree-&
* 找结点(x)的后继结点。即,查找"二叉树中数据值大于该结点"的"最小结点"。
111 Node* bstree_successor(Node *x)
// 如果x存在右孩子,则"x的后继结点"为 "以其右孩子为根的子树的最小结点"。
if (x-&right != NULL)
return bstree_minimum(x-&right);
// 如果x没有右孩子。则x有以下两种可能:
// (01) x是"一个左孩子",则"x的后继结点"为 "它的父结点"。
// (02) x是"一个右孩子",则查找"x的最低的父结点,并且该父结点要具有左孩子",找到的这个"最低的父结点"就是"x的后继结点"。
Node* y = x-&
while ((y!=NULL) && (x==y-&right))
* 找结点(x)的前驱结点。即,查找"二叉树中数据值小于该结点"的"最大结点"。
133 Node* bstree_predecessor(Node *x)
// 如果x存在左孩子,则"x的前驱结点"为 "以其左孩子为根的子树的最大结点"。
if (x-&left != NULL)
return bstree_maximum(x-&left);
// 如果x没有左孩子。则x有以下两种可能:
// (01) x是"一个右孩子",则"x的前驱结点"为 "它的父结点"。
// (01) x是"一个左孩子",则查找"x的最低的父结点,并且该父结点要具有右孩子",找到的这个"最低的父结点"就是"x的前驱结点"。
Node* y = x-&
while ((y!=NULL) && (x==y-&left))
* 创建并返回二叉树结点。
* 参数说明:
key 是键值。
parent 是父结点。
left 是左孩子。
right 是右孩子。
161 static Node* create_bstree_node(Type key, Node *parent, Node *left, Node* right)
if ((p = (Node *)malloc(sizeof(Node))) == NULL)
return NULL;
p-&right =
p-&parent =
* 将结点插入到二叉树中
* 参数说明:
tree 二叉树的根结点
z 插入的结点
* 返回值:
184 static Node* bstree_insert(BSTree tree, Node *z)
Node *y = NULL;
// 查找z的插入位置
while (x != NULL)
if (z-&key & x-&key)
z-&parent =
if (y==NULL)
else if (z-&key & y-&key)
y-&right =
* 新建结点(key),并将其插入到二叉树中
* 参数说明:
tree 二叉树的根结点
key 插入结点的键值
* 返回值:
219 Node* insert_bstree(BSTree tree, Type key)
// 新建结点
// 如果新建结点失败,则返回。
if ((z=create_bstree_node(key, NULL, NULL, NULL)) == NULL)
return bstree_insert(tree, z);
* 删除结点(z),并返回根节点
* 参数说明:
tree 二叉树的根结点
z 删除的结点
* 返回值:
239 static Node* bstree_delete(BSTree tree, Node *z)
Node *x=NULL;
Node *y=NULL;
if ((z-&left == NULL) || (z-&right == NULL) )
y = bstree_successor(z);
if (y-&left != NULL)
if (x != NULL)
x-&parent = y-&
if (y-&parent == NULL)
else if (y == y-&parent-&left)
y-&parent-&left =
y-&parent-&right =
if (y != z)
z-&key = y-&
if (y!=NULL)
* 删除结点(key为节点的键值),并返回根节点
* 参数说明:
tree 二叉树的根结点
z 删除的结点
* 返回值:
282 Node* delete_bstree(BSTree tree, Type key)
Node *z, *
if ((z = bstree_search(tree, key)) != NULL)
tree = bstree_delete(tree, z);
* 销毁二叉树
295 void destroy_bstree(BSTree tree)
if (tree==NULL)
if (tree-&left != NULL)
destroy_bstree(tree-&left);
if (tree-&right != NULL)
destroy_bstree(tree-&right);
free(tree);
* 打印"二叉树"
-- 二叉树的节点
-- 节点的键值
* direction
0,表示该节点是根节点;
-1,表示该节点是它的父结点的左孩子;
1,表示该节点是它的父结点的右孩子。
317 void print_bstree(BSTree tree, Type key, int direction)
if(tree != NULL)
if(direction==0)
// tree是根节点
printf("%2d is root\n", tree-&key);
// tree是分支节点
printf("%2d is %2d's %6s child\n", tree-&key, key, direction==1?"right" : "left");
print_bstree(tree-&left, tree-&key, -1);
print_bstree(tree-&right,tree-&key,
二叉查找树的测试程序(btree_test.c)
* C 语言: 二叉查找树
* @author skywang
8 #include &stdio.h&
9 #include "bstree.h"
11 static int arr[]= {1,5,4,3,2,6};
12 #define TBL_SIZE(a) ( (sizeof(a)) / (sizeof(a[0])) )
14 void main()
BSTree root=NULL;
printf("== 依次添加: ");
ilen = TBL_SIZE(arr);
for(i=0; i& 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);
二叉查找树的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
== 树的详细信息:
right child
left child
left child
left child
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
&生活的悲欢离合永远在地平线以外,而眺望是一种青春的姿态…PS.文章是笔者分享的学习笔记,若你觉得可以、还行、过得去、甚至不太差的话,可以“推荐”一下的哦。就此谢过!
currentDiggType = 0;
上一篇: 下一篇:
阅读(23666) 评论()
最新IT新闻: ·
最新知识库文章: ·
fixPostBody();
setTimeout(function () { incrementViewCount(cb_entryId); }, 50);
deliverAdT2();
deliverAdC1();
deliverAdC2();
loadNewsAndKb();
loadBlogSignature();
LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType);
loadOptUnderPost();
GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);
&div class="spacer"&
二叉查找树的简单实现(C语言版)
老司机不多说,直接上代码
头文件:#ifndef BINARYTREE_FIND_H_INCLUDED
#define BINARYTREE_FIND_H_INCLUDEDstruct TreeNo...
数据结构之 二叉查找树(C语言实现)
数据结构之 二叉查找树1. 二叉查找树的定义二叉查找树(binary search tree)是一棵二叉树,或称为二叉搜索树,可能为空;一棵非空的二叉查找树满足一下特征:
每个元素有一个关键字,并且任...
C语言实现二叉查找树的输出
本文简单介绍了二叉查找树的简单输出方式(前序、中序和后序以及按层输出)的简单实现...
C语言实现二叉查找树(BST)的基本操作
我们在上一篇博客中讲解了二叉树,这一次我们来实现二叉树的进阶——二叉查找树(Binary Search Tree),又称二插排序树(Binary Sort Tree)。所以简称为BST。二插查找树的定...
创建二叉查找树的完整C代码
二叉查找树(Binary Search Tree),又称二叉排序树(Binary Sort Tree),亦称二查搜索书。
它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树...
二叉查找树C语言实现及其可视化
0, 二叉搜索树的定义:(二叉查找树)(二叉排序树)
(1)若左子树非空,则左子树上的所有的节点的值都小于根节点的值
(2)若右子树非空,则右子树上的所有的节点的值都大于根节点...
二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
二叉查找树是一种特殊性质的二叉树,该树中的任何一个节点,它的左子树(若存在)的元素值小于节点的元素值,右子树(若存在)的元素值大于节点的元素值。
实现了二叉树查找树的实现以及基本操作,包括查找、插入、...
c语言二叉树和二叉搜索树的实现
DataStructure
Created by 仁和 on 16/8/30.
Copyright (C) 2016年 wfw. All righ...
C语言实现二叉查找树(搜索树)的创建,插入,查找,删除
最近学习二叉树的一些算法
二叉查找树(二叉排序树)创建、插入、删除、查找-C语言
二叉查找树:或者是一颗空树;或者是具有以下性质的二叉树:(1)若它的左子树不为空,则左子树上所有结点的值都小于根结点的值;(2)若它的右子树不为空,则右子树所有结点的值均大于它的根结点的值;(3)左右...
没有更多推荐了,

我要回帖

更多关于 辽H 的文章

 

随机推荐