- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 5章 节 树 数据结构课件.ppt
树和森林的概念
二叉树
二叉树的表示
二叉树遍历及其应用
线索化二叉树
树与森林
堆
Huffman树 ;树和森林的概念;自由树; r 是一个特定的称为根(root)的结点,它只有直接后继,但没有直接前驱;
根以外的其他结点划分为 m (m ? 0) 个互不相交的有限集合T1, T2, …, Tm,每个集合又是一棵树,并且称之为根的子树。
每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继。;树的示意图(P.187);template class Type class Tree {
public:
Tree ( );
~Tree ( );
position Root ( );
BuildRoot ( const Type value );
position FirstChild ( position p );
position NextSibling ( position p );
position Parent ( position p );
Type GetData ( position p );
int InsertChild ( const position p,
const Type value ); int DeleteChild ( position p, int i );
};一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。;;性质1 若二叉树的层次从1开始, 则在二叉树的第 i 层最多有 2i -1个结点。(i ≥ 1)
;性质3 对任何一棵二叉树, 如果其叶结点有 n0 个, 度为2的非叶结点有 n2 个, 则有
n0=n2+1
;定义1 满二叉树 (Full Binary Tree)
如果二叉树中所有分支结点的度数都为2,且叶子结点都在同一层次上,则称这类二叉树为满二叉树。
;;;性质5 如将一棵有n个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号 1, 2, …, n,则有以下关系:
(1)若i ==1, 则 i 为根,无双亲
若i 1, 则 i 的双亲为?i/2?
(2)若n =2*i, 则结点i 的左子女为 2*i;
(3)若n=2*i+1, 则结点i 的右子女为2*i+1
;(4)若结点编号i为奇数,且i!=1,则它的左兄弟为结点i-1。
(5)若结点编号i为偶数,且i!=n,则它的右兄弟为结点i+1。
(6)结点i所在层次为?log2i?+1
;template class Type class BinaryTree {
public:
BinaryTree ( ); //构造函数
BinaryTree ( BinTreeNodeType * lch,
BinTreeNodeType * rch, Type item );
//构造以item为根,lch和rch为左、右
//子树的二叉树
int IsEmpty ( ); //判二叉树空否?
BinTreeNodeType * Parent ( ); //双亲 ; BinTreeNodeType * LeftChild ( );
//取左子女结点地址
BinTreeNodeType * RightChild ( );
//取右子女结点地址
int Insert ( const Type item ); //插入
int Find ( const Type item ) const; //搜索
Type GetData ( ) const; //取得结点数据
BinTreeNodeType *GetRoot ( ) const;
//取根结点地址
};;;;;;二叉树链表表示的示例;二叉链表的静态结构;template class Type class BinaryTree;
template class Type Class BinTreeNode {
friend class BinaryTreeTyp
文档评论(0)