什么是二叉树

作者&投稿:井闻 (若有异议请与网页底部的电邮联系)
~ 二叉树 (binary tree) 是另一种树型结构,它的特点是每个结点至多只有二棵子 树 (即二叉树中不存在度大于 2的结点 ),并且,二叉树的子树有左右之分,其次序不能任意颠倒 . 二叉树是一种数据结构 :

Binary_tree=(D,R)

其中: D是具有相同特性的数据元素的集合 ;若 D等于空 ,则 R等于空称为空的二叉树 ;若 D等于空则 R是 D上某个二元关系 H的集合,即 R={H},且
(1) D 中存在唯一的称为根的元素 r,它的关系 H下无前驱 ;
(2) 若 D-{r}不等于空,则 D-{r}={Dl,Dr},且 Dl交 Dr等于空 ;
(3) 若 Dl不等于空 ,则在 Dl中存在唯一的元素 xl,〈 r,xl〉属于 H,且存在 Dl上的关系 Hl属于 H; 若 Dr不等于空 ,则在 Dr中存在唯一的元素 xr,〈 r,xr〉 >属于 H, 且存 Dr上的关 系 Hr属于 H; H={r,xl,< r,xr> ,Hl, Hr};
(4) (Dl, Hl) 是一棵合本定义的二叉树,称为根 r的左子树 ,(Dr,Hr)是一棵符合定义的二叉树,称为根的右子树。

其中,图 6.2 是各种形态的二叉树 .

(1) 为空二叉树 (2)只有一个根结点的二叉树 (3)右子树为空的二叉树 (4)左子树为空的二叉树 (5)完全二叉树

二叉树的基本操作:

(1)INITIATE(BT ) 初始化操作。置 BT为空树。

(2)ROOT(BT)\ROOT(x) 求根函数。求二叉树 BT的根结点或求结点 x所在二叉树的根结点。
若 BT是空树或 x不在任何二叉树上,则函数值为 “空 ”。

(3)PARENT(BT,x) 求双亲函数。求二叉树 BT中结点 x的双亲结点。若结点 x是二叉树 BT 的根结点
或二叉树 BT中无 x结点,则函数值为 “空 ”。

(4)LCHILD(BT,x) 和 RCHILD(BT,x) 求孩子结点函数。分别求二叉树 BT中结点 x的左孩 子和右孩子结点。
若结点 x为叶子结点或不在二叉树 BT中,则函数值为 “空 ”。

(5)LSIBLING(BT,x) 和 RSIBING(BT,x) 求兄弟函数。分别求二叉树 BT中结点 x的左兄弟和右兄弟结点。
若结点 x是根结点或不在 BT中或是其双亲的左 /右子树根 ,则函树值 为 “空 ”。

(6)CRT_BT(x,LBT,RBT) 建树操作。生成一棵以结点 x为根,二叉树 LBT和 RBT分别为左, 右子树的二叉树。

(7)INS_LCHILD(BT,y,x) 和 INS_RCHILD(BT,x) 插入子树操作。将以结点 x为根且右子树为空的二叉树
分别置为二叉树 BT中结点 y的左子树和右子树。若结点 y有左子树 /右子树,则插入后是结点 x的右子树。

(8)DEL_LCHILD(BT,x) 和 DEL-RCHILD(BT,x) 删除子树操作。分别删除二叉树 BT中以结点 x为根的左子树或右子树。
若 x无左子树或右子树,则空操作。

(9)TRAVERSE(BT) 遍历操作。按某个次序依此访问二叉树中各个结点,并使每个结点只被访问一次。

(10)CLEAR(BT) 清除结构操作。将二叉树 BT置为空树。

5.2.2 二叉树的存储结构

一 、顺序存储结构
连续的存储单元存储二叉树的数据元素。例如图 6.4(b)的完全二叉树 , 可以向量 (一维数组 ) bt(1:6)作它的存储结构,将二叉树中编号为 i的结点的数据元素存放在分量 bt[i]中 ,如图 6.6(a) 所示。但这种顺序存储结构仅适合于完全二叉树 ,而一般二叉树也按这种形式来存储 ,这将造成存 贮浪费。如和图 6.4(c)的二叉树相应的存储结构图 6.6(b)所示,图中以 “0”表示不存在此结点 .

二、 链式存储结构
由二叉树的定义得知二叉树的结点由一个数据元素和分别指向左右子树的两个分支构成 ,则表 示二叉树的链表中的结点至少包含三个域 :数据域和左右指针域 ,如图 (b)所示。有时 ,为了便于找 到结点的双亲 ,则还可在结点结构中增加一个指向其双亲受的指针域,如图 6.7(c)所示。

5.3 遍历二叉树

遍历二叉树 (traversing binary tree)的问题, 即如何按某条搜索路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。 其中常见的有三种情况:分别称之为先 (根 )序遍历,中 (根 )序遍历和后 (根 )序遍历。

5.3.1 前序遍历

前序遍历运算:即先访问根结点,再前序遍历左子树,最后再前序遍历右子树。前序遍历运算访问二叉树各结点是以根、左、右的顺序进行访问的。例如:

按前序遍历此二叉树的结果为: Hello!How are you?

proc preorder(bt:bitreprtr)
if (bt>null)[
print(bt^);
preorder(bt^.lchild);
preorder(bt^.rchild);]
end;

5.3.2 中序遍历

中序遍历运算:即先中前序遍历左子树,然后再访问根结点,最后再中序遍历右子树。中序遍历运算访问二叉树各结点是以左、根、右的顺序进行访问的。例如:

按中序遍历此二叉树的结果为: a*b-c

proc inorder(bt:bitreprtr)
if (bt>null)[
inorder(bt^.lchild);
print(bt^);
niorder(bt^.rchild);]
end;

5.3.3 后序遍历

后序遍历运算:即先后序遍历左子树,然后再后序遍历右子树,最后访问根结点。后序遍历运算访问二叉树各结点是以左、右、根的顺序进行访问的。例如:

按后序遍历此二叉树的结果为: Welecome to use it!

proc postorder(bt:bitreprtr)
if (bt>null)[
postorder(bt^.lchild);
postorder(bt^.rchild);]
print(bt^);
end;

五、例:
1.用顺序存储方式建立一棵有31个结点的满二叉树,并对其进行先序遍历。
2.用链表存储方式建立一棵如图三、4所示的二叉树,并对其进行先序遍历。
3.给出一组数据:R={10.18,3,8,12,2,7,3},试编程序,先构造一棵二叉树,然后以中序遍历访问所得到的二叉树,并输出遍历结果。
4.给出八枚金币a,b,c,d,e,f,g,h,编程以称最少的次数,判定它们蹭是否有假币,如果有,请找出这枚假币,并判定这枚假币是重了还是轻了。

中山纪念中学三鑫双语学校信息学竞赛组编写 2004.7.15


什么是二叉树
二叉树,每个节点有不大于2个的叶子结点,也就是0个,1个或2个叶子结点的树。平衡二叉树,一棵二叉搜索树(BST),它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉树是什么
二叉树是一种树形数据结构。二叉树是每个节点最多有两个子节点的树结构。通常,每个节点有三个指针域:一个用于指向左子节点,一个用于指向右子节点,另一个用于指向父节点。在二叉树中,节点的左子节点和右子节点通常被称为左孩子和右孩子。节点之间的关系定义了从根节点到所有其他节点的路径。这种...

二叉树怎么看
树与二叉树 树是一种简单的非线性结构,所有元素之间具有明显的层次特性。在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。在树结构中,一个结点所拥有的后...

什么是二叉树
二叉树是一类非常重要的树形结构,它可以递归地定义如下: 二叉树T是有限个结点的,它或者是空集,或者由一个根结点u以及分别称为左子树和右子树的两棵互不相交的二叉树u(1)和u(2)组成。

什么是二叉树
二叉树是树的一种,每个结点最多有两个孩子,分为左孩子和右孩子,如果每个结点都有两个孩子就称为完全二叉树,二叉树有多种遍历方式,分为先序,中序,后序三种,每种以根结点为标志。要想详细了解最好找一本数据结构图那章看看

二叉树是什么?
度=节点总数-1。在树中,每个节点有多少条边出去,该节点的度就为多少。也就是说,一条边贡献一个度。而树中,边的条数是节点数减去1。计算节点数一般的方法是 n=n0+n1+n2+... 所以度和节点的关系就是,度=节点总数-1 n为奇数时,完全二叉树中没有度为1的节点:我们可以这样看,完全二叉...

二叉树算法是什么?
二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。性质 1、在二叉树中,第i层的结点总数不超过2^(i-1)。2、深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点。3、对于任意...

什么叫二叉树?
带权二叉树是指一种用来表示带权信息的二叉树,常用于数据压缩和信息编码。建立带权二叉树的一种方法是采用贪心算法,具体流程如下:将所有的带权信息按权值从小到大排序。取出权值最小的两个信息,将它们合并成一个新的信息,新信息的权值为两个信息的权值之和。将新信息加入到剩余的信息中,继续执行...

什么是树与二叉树?
树是树形结构的简称,是一种非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。

什么是完全二叉树?
因为二叉树所有结点滴个数都不大于2,所以结点总数n=n0+n1+n2 (1)又因为度为1和度为2的结点分别有1个子树和2个子树,所以,二叉树中子树结点就有n(子)=n1+2n2 二叉树中只有根节点不是子树结点,所以二叉树结点总数n=n(子)+1 即 n=n1+2n2+1 (2)结合(1)式和(2)式就得n0=n2+1...

乌鲁木齐县15143236345: 二叉树(计算机科学术语) - 搜狗百科
道富小儿: 二叉树是一类非常重要的树形结构,它可以递归地定义如下:二叉树T是有限个结点的集合,它或者是空集,或者由一个根结点u以及分别称为左子树和右子树的两棵互不相交的二叉树u(1)和u(2)组成.若用n,n1和n2分别表示T,u(1)和u(2)的结点数,则有n=1+n1+n2 .u(1)和u(2)有时分别称为T的第一和第二子树.

乌鲁木齐县15143236345: 什么是二叉树? -
道富小儿: 二叉树 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆. 二叉树的每个结点至多只有二棵子树(不存在度大于2的...

乌鲁木齐县15143236345: 什么是二叉树?二叉树拿来干什么? -
道富小儿: 1、二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于3.有根二叉树还要满足根结点的度不大于2.有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点.然而,没有足够的信息来区分左结点...

乌鲁木齐县15143236345: 计算机c语言中什么是“二叉树”? -
道富小儿: 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆或是二叉排序树. 二叉树的每个结点至多只有二棵子树(不存在度大...

乌鲁木齐县15143236345: 二叉树是什么? -
道富小儿: 在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆.二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒.二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1.

乌鲁木齐县15143236345: 2叉树是什么? -
道富小儿: 是数据结构的一个概念

乌鲁木齐县15143236345: 什么是2叉树 -
道富小儿: 所谓2叉树并不是真正生活意义上的树,在数据结构中,树是一种存储结构,度就是整颗树上任一个结点上最大叶子树,2叉树就是度是2的树

乌鲁木齐县15143236345: 二叉树什么意思我需要的是详细的讲解!!!!!教导我一下啊,在线等
道富小儿: 二叉树 (binary tree) 是另一种树型结构,它的特点是每个结点至多只有二棵子 树 (即二叉树中不存在度大于 2的结点 ),并且,二叉树的子树有左右之分,其次序不能任意颠倒 . 二叉树是一种数据结构 (有好多类型) 从根节点开始,每一个节点都有2个或2个以下的子节点.在数据结构中用指针进行操作. 就像是 一个父亲有两个儿子 儿子们又各有自己的儿子 (可以是两个也可以是一个) 像树枝一样分叉

乌鲁木齐县15143236345: 什么是二叉树
道富小儿: 这是计算机编程数据结构里的一个东西,是一种计算机数据结构, 顺序搜索加分支的.... 形象地说,就是从一个数据开始(“根”),顺序遍历一个数据库, 其中包括分支,搜索到头再回到分支处通过另一条路.... 即像树的生长一样...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网