若根结点的关键字值等于查找的关键字,成功。

否则,若小于根结点的关键字值,递归查左子树。

若大于根结点的关键字值,递归查右子树。

若子树为空,查找不成功。

插入算法:

首先执行查找算法,找出被插结点的父亲结点。

判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入。

若二叉树为空。则首先单独生成根结点。

注意:新插入的结点总是叶子结点。

void InsertBST(t,key)

//在二叉排序树中插入查找关键字key

{

if(t==NULL){

t=new BiTree;

t->lchild=t->rchild=NULL;

t->data=key;

return; }

if(keydata ) InsertBST(t->lchild,key);

else InsertBST (t->rchild, key );

}

void CreateBiTree(tree,d【 】,n)

//n个数据在数组d中,tree为二叉排序树根

{tree=NULL;

for(i=0;i InsertBST(tree,d);

}

二叉排序树造价信息

市场价 信息价 询价
材料名称 规格/型号 市场价
(除税)
工程建议价
(除税)
行情 品牌 单位 税率 供应商 报价日期
二叉 S-8 查看价格 查看价格

13% 大连东方泰陶建材经销部
二叉 200X120X100mm 查看价格 查看价格

金九方

13% 佛山市金九方陶瓷有限公司
二叉(三类色) S-8 查看价格 查看价格

比特利

13% 重庆比特利建材有限公司
二叉类色) S-8 查看价格 查看价格

比特利

13% 重庆比特利建材有限公司
二叉(四类色) S-8 查看价格 查看价格

比特利

13% 重庆比特利建材有限公司
二叉(一类色(红胎)) S-8 查看价格 查看价格

比特利

13% 重庆比特利建材有限公司
类色) S-四 查看价格 查看价格

比特利

13% 重庆比特利建材有限公司
类色) T四 查看价格 查看价格

比特利

13% 重庆比特利建材有限公司
材料名称 规格/型号 除税
信息价
含税
信息价
行情 品牌 单位 税率 地区/时间
日本瓦[J-四] 查看价格 查看价格

韶关市2009年11月信息价
日本瓦[J-四] 查看价格 查看价格

韶关市2009年7月信息价
日本瓦[J-四] 查看价格 查看价格

韶关市2008年9月信息价
日本瓦[J-四] 查看价格 查看价格

韶关市2008年8月信息价
日本瓦[J-四] 查看价格 查看价格

韶关市2008年1月信息价
日本瓦[J-四] 查看价格 查看价格

韶关市2007年10月信息价
日本瓦[J-四] 查看价格 查看价格

韶关市2007年8月信息价
日本瓦[J-四] 查看价格 查看价格

韶关市2007年7月信息价
材料名称 规格/需求量 报价数 最新报价
(元)
供应商 报价地区 最新报价时间
二叉 S-8|3645块 1 查看价格 大连东方泰陶建材经销部 辽宁  大连市 2015-11-24
二叉喷头 DN15|6779个 1 查看价格 佛山市天兴消防器材有限公司 广东  佛山市 2015-10-20
二叉 -|1台 1 查看价格 深圳市力德森气动工具有限公司    2017-06-12
二叉 200X120X100mm|9894块 1 查看价格 佛山市金九方陶瓷有限公司 广东  佛山市 2015-12-24
二叉头路灯 高度5米,功率2×30W,光源LED|4台 3 查看价格 深圳市奥瑞泰光电科技有限公司 广东  广州市 2019-01-28
超五类二叉水晶头 PL45E-A 水晶头类|7531盒 1 查看价格 广州市唯康通信技术有限公司 广东  广州市 2015-05-27
场地基本清表 场地基本清表|1场地基本清表 1 查看价格 广州定额科 广东  深圳市 2010-06-30
特型 1.种类:黄连木2.胸径或干径:10主杆,主杆胸径16-183.株高、冠径:植株高9m4.起挖方式:符合设计、植株种植要求5.养护期:2年,成活率100%|2株 2 查看价格 成都温江区澄昊园艺场 四川   2019-08-30

二叉排序树基本步骤常见问题

  • 刮墙的基本步骤?

    你好,新房墙面一般不用铲,但前提是手摸墙面时不掉白(墙灰),再用美巢牌“墙锢”(界面剂)辊涂一遍,旧房就需要铲掉了,因为年头太长墙体表面会粉化,(辊界面剂也不行),这样跟新刮的腻子不能粘接。注意,铲掉...

  • 工程预算基本步骤

    计算应该先结构,后装修,先地下,后地上,计算设计图纸的工程量。

  • cad制图的基本步骤

    一、设置绘图单位选择[格式]——[单位] :精度由0.000改为0;单位:毫米。二、设置绘图界限(既选择打印纸大小)选择[格式]——[绘图界限] :如 设A3:左下角为:0,0 右上角为:420,29...

二叉排序树基本步骤文献

46家庭装修基本步骤-二十步 46家庭装修基本步骤-二十步

格式:pdf

大小:62KB

页数: 11页

评分: 4.7

家庭装修基本步骤 -二十步 家庭装修步骤 (一)前期设计 1、明确装修过程涉及的面积。特别是贴砖面积、墙面漆面积、壁纸面积、地板面积; 2、明确主要墙面尺寸。特别是以后需要设计摆放家具的墙面尺寸。 家庭装修步骤 (二)主体拆改 主要包括拆墙、砌墙、铲墙皮、拆暖气、换塑钢窗等等。主体拆改说白了,就是先把工地的框架先搭起 来。 家庭装修步骤 (三)水电改造 1、看看油烟机插座的位置是否影响以后油烟机的安装; 2、看看水表的位置是否合适; 3、看看上水口的位置是否便于以后安装水槽。 家庭装修步骤 (四)木工 木工、瓦工、油工是施工环节的“三兄弟”,基本出场顺序是:木——瓦——油。基本出场原则是— —谁脏谁先上。“谁脏谁先上”也是决定家装顺序的一个基本原则之一。 家庭装修步骤 (五)贴砖 1、过门石、大理石窗台的安装。过门石的安装可以和铺地砖一起完成,也可以在铺地砖之后,大理石 窗台的安装一般在窗

立即下载
地块策划几个基本步骤 地块策划几个基本步骤

格式:pdf

大小:62KB

页数: 3页

评分: 4.8

一、地产规划前期步奏 [准备阶段 ] 1、 项目资源条件整合及判断 负责部门: 策划部、项目部、会员销售部、工程部 报告名称: 《 ** 项目策划大纲》 中心内容: 资源条件整合 宏观资料:市场整体、片区趋势、基本行情。 地段资料:规划要点、坐标。 周边资料:交通、配套、(种植、康复养老)的规划、设计、包装、销售。 发展商资料:背景、关系、资金、技术等的实力情况。 判断内容:优势、难点、突破口、把握度。 2、 多方案初步规划、设计或调整建议 负责部门: 策划部、项目部、工程部、设计院 报告名称: 《会议纪要汇总》 《项目概念设计提示》或《项目调整建议》 中心内容: 草图、立意、说明、交流记录 [前期策划阶段 ] 3、 地块内在条件整合及价值分析 负责部门: 策划部、项目部、财务部 报告名称: 《项目土地价值与分析报告》 中心内容: 适合的规则布局和建筑类型及其投入和产出价值比较 4、

立即下载

1.二叉排序树的概念:

二叉排序树是一种动态树表。

二叉排序树的定义:二叉排序树或者是一棵空树,

或者是一棵具有如下性质的二叉树:

⑴ 若它的左子树非空,则左子树上所有结点的值均小于根结点的值;

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

⑶ 左、右子树本身又各是一棵二叉排序树。二叉排序树的性质: 按中序遍历二叉排序树,所得到的中序遍历序列是一个递增有序序列。

2.二叉排序树的插入:

在二叉排序树中插入新结点,要保证插入后的二叉树仍符合二叉排序树的定义。

插入过程:若二叉排序树为空,则待插入结点*S作为根结点插入到空树中;

当非空时,将待插结点关键字S->key和树根关键字t->key进行比较,

若s->key = t->key,则无须插入,若s->key< t->key,则插入到根的左子树中,

若s->key> t->key,则插入到根的右子树中。而子树中的插入过程和在树中的插入过程相同,

如此进行下去,直到把结点*s作为一个新的树叶插入到二叉排序树中,或者直到发现树已有相同关键字的结点为止。

3. 二叉排序树生成:

从空的二叉排序树开始,经过一系列的查找插入操作以后,生成了一棵二叉排序树。

说明:

① 每次插入的新结点都是二叉排序树上新的叶子结点。

② 由不同顺序的关键字序列,会得到不同二叉排序树。

③ 对于一个任意的关键字序列构造一棵二叉排序树,其实质上对关键字进行排序。

4.二叉排序树查找的程序实现:

5. 二叉排序树的删除:

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

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

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

⑶ 若结点*p的左、右子树均非空,先找到*p的中序前趋结点*s(注意*s是*p的左子树中的最右下的结点,它的右链域为空),然后有两种做法:

① 令*p的左子树直接链到*p的双亲结点*f的左链上,而*p的右子树链到*p的中序前趋结点*s的右链上。

② 以*p的中序前趋结点*s代替*p(即把*s的数据复制到*p中),将*s的左子树链到*s的双亲结点*q的左(或右)链上。

6. 删除算法演示 :

7. 二叉排序树的查找:

在二叉排序树中进行查找的过程和二分查找类似,也是一个逐步缩小查找范围的过程。若查找成功,则是走了一条从根结点到待查结点的路径;若查找失败,则是走了一条根结点到某个叶子结点的路径。因此,查找过程中和关键字比较的次数不超过树的深度。

由于含有n个结点的二叉排序树不唯一,形态和深度可能不同。故含有n个结点的二叉排序树的平均查找长度和树的形态有关。

最好的情况是: 二叉排序树和二叉判定树形态相同。

最坏的情况是: 二叉排序树为单支树,这时的平均查找长度和顺序查找时相同。

最坏情况示例

就平均性能而言,

二叉排序树上的查找和二分查找相差不大,并且二叉排序树上的插入和删除结点十分方便,无须大量移动结点。

二叉排序树查找

二叉排序树(Binary Sort Tree:BST)

1、二叉排序树的定义

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

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

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

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

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

2、二叉排序树的特点

由BST性质可得:

(1) 二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。

(2) 二叉排序树中,各结点关键字是惟一的。

注意:

实际应用中,不能保证被查找的数据集中各元素的关键字互不相同,所以可将二叉排序树定义中BST性质(1)里的"小于"改为"小于等于",或将BST性质(2)里的"大于"改为"大于等于",甚至可同时修改这两个性质。

(3) 按中序遍历该树所得到的中序序列是一个递增有序序列。

【例】下图所示的两棵树均是二叉排序树,它们的中序序列均为有序序列:2,3,4,5,7,8。

3、二叉排序树的存储结构

typedef int KeyType; //假定关键字类型为整数

typedef struct node { //结点类型

KeyType key; //关键字项

InfoType otherinfo; //其它数据域,InfoType视应用情况而定,下面不处理它

struct node *lchild,*rchild,*parent; //左右孩子指针

} BSTNode;

typedef BSTNode *BSTree; //BSTree是二叉排序树的类型

二叉排序树的基本操作(pascal):

1.中序遍历所有元素

procedure tree_walk(x:longint);

begin

if x<>0 then

begin

tree_walk(left[x]);

write(key[x]);

tree_walk(right[x]);

end;

2.查找给定的元素

function tree_search(x,k:longint):longint;

begin

if (x=0) or (k=key[x]) then exit(x);

if k

end;

非递归版本

function tree_search(x,k:longint):longint;

begin

while (x<>0) and (k<>key[x]) do

begin

if k

end;

exit(x);

end;

3.查找最小元素

function tree_minimum(x:longint):longint;

begin

while left[x]<>0 do

x:=left[x];

exit(x);

end;

查找最大元素

function tree_maximum(x:longint):longint;

begin

while right[x]<>0 do

x:=right[x];

exit(x);

end;

4. 求后继

function tree_successor(x:longint):longint;

var

y:longint;

begin

if right[x]<>0 then exit(tree_minimum(right[x]));//若右子树不空,则返回右子树中的最小值

y:=p[x];//若右子树为空,则后继y为x的最低祖先节点,且y的左儿子也是x的祖先

while (y<>0) and (x=right[y]) do

begin

x:=y;

y:=p[y];

end;

exit(y);//注意,若y为0,则x无后继

end;

//注意,函数返回值为节点编号,并不是节点本身的值

5.插入

procedure tree_insert(z:longint);//注意z为节点编号,并非树中的值

var

x,y:longint;

begin

y:=0;

x:=root;

while x<>0 do//查找z的父节点,y记录

begin

y:=x;

if key[z]

end;

p[x]:=y;

if y=0 then root:=z//若z为根节点

else begin

if key[z]

end;

end;

6.删除

删除操作是最麻烦的,分3种情况:

(1)若z无子树,则就删除z节点,更新p[z]的值为空

(2)若z有一个子树,删除z节点,更新p[z]的值为z的儿子节点,更新left[p[z]] 或 right[p[z]]

(3)若z有两棵子树,先找到z的后继y(后继节点无左子树,可证),删除y节点,更新p[y]与left[p[y]] 或 right[p[y]],最后用节点y的数据覆盖z节点

procedure tree_delete(z:longint);

var

x,y:longint;

begin

if (left[z]=0) or (right[z]=0) then y:=z

else y:=tree_successor(z);

if left[y]<>0 then x:=left[y]

else x:=right[y];

if x<>0 then p[x]:=p[y];

if p[y]=0 then root:=x

else begin

if y=left[p[y]] then left[p[y]]:=x

else right[p[y]]:=x;

end;

if z<>y then key[z]:=key[y];

end;

7.查找数中第k大元素

需要对每个节点新开一个域v[x],记录该节点的有多少子节点,

查找时分三种情况:

(1)k=v[left[x]] 1 则当前x节点为所求

(2)k<=v[left[x]] 则在左子树中继续查找

(3)k>v[left[x]] 1 则在右子树中继续查找,k更新为k-left[x]-1;

function find(x,k:longint):longint;

begin

if v[left[x]] 1=k then exit(key[k])

else if v[left[x]]>=k then exit(find(left[x],k))

else exit(find(right[x],k-v[left[x]]-1));

end;

二叉排序树相关推荐
  • 相关百科
  • 相关知识
  • 相关专栏