b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

二叉排序树思想及C语言实现

电脑杂谈  发布时间:2019-12-20 04:02:38  来源:网络整理

c语言二叉树的遍历算法_c语言 二分法排序_c语言二叉排序树

转自:

1.二叉排序树的定义

二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:

①若它的左子树非空,则左子树上所有节点的值均大于根节点的值;

②若它的右子树非空,则右子树上所有节点的值均高于根结点的值;

③左、右子树本身既各是一棵二叉排序树。

c语言 二分法排序_c语言二叉树的遍历算法_c语言二叉排序树

上述性质简称二叉排序树性质(BST性质),故二叉排序树实际上是满足BST性质的二叉树。

2.二叉排序树的性质

按中序遍历二叉排序树,所得到的中序遍历序列是一个递增有序序列。

3.二叉排序树的插入

在二叉排序树中插入新节点,要确保插入后的二叉树仍依照二叉排序树的定义。

插入过程:

c语言 二分法排序_c语言二叉排序树_c语言二叉树的遍历算法

若二叉排序树为空,则待插入节点*S作为根结点插入至空树中;

当非空时,将待插结点关键字S->key和树根关键字t->key进行比较c语言二叉排序树,若s->key = t->key,则无须插入,若s->key< t->key,则插入到根的左子树中,若s->key> t->key,则插入到根的右子树中。而子树中的插入过程跟在树中的插入过程相似,如此进行下去,直到把结点*s作为一个新的树叶插入到二叉排序树中,或者等到看到树已有同样关键字的节点为止。

4.二叉排序树的查找

假定二叉排序树的根节点指针为 rootc语言二叉排序树,给定的关键字值为 K ,则查找算法可表述为:

① 置初值: q = root ;

② 如果 K = q -> key ,则查找成功,算法结束;

c语言 二分法排序_c语言二叉树的遍历算法_c语言二叉排序树

③ 否则,如果 K < q -> key ,而且 q 的左子树非空,则将 q 的左子树根送 q ,转方法②;否则,查找失败,结束算法;

④ 否则,如果 K > q -> key ,而且 q 的右子树非空,则将 q 的右子树根送 q ,转方法②;否则,查找失败,算法结束。

5.二叉排序树的删除

假设被删结点是*p,其双亲是*f,不失一般性,设*p是*f的左孩子,下面分三种状况讨论:

⑴ 若节点*p是叶子结点,则只需修改其双亲节点*f的指针即可。

⑵ 若结点*p只有左子树PL或者只有右子树PR,则即使让PL或PR 成为其双亲节点的左子树即可。

c语言 二分法排序_c语言二叉排序树_c语言二叉树的遍历算法

⑶ 若结点*p的左、右子树均非空,先找到*p的中序前趋(或后继)结点*s(注意*s是*p的左子树中的更右下的节点,它的右链域为空),然后有两种做法:① 令*p的左子树直接链到*p的双亲节点*f的左链上,而*p的右子树链到*p的中序前趋结点*s的右链上。② 以*p的中序前趋结点*s代替*p(即把*s的数据复制至*p中),将*s的左子树链到*s的双亲结点*q的左(或右)链上。

代码实现:

bi_search_tree.h

#ifndef__BI_SEARCH_TREE_H__

#define__BI_SEARCH_TREE_H__

/*

*说明:定义了二叉查找树的相关数据结构跟几个基本操作

*作者:leaf


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-134000-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...