《第章 树与二叉树》由会员分享,可在线阅读,更多相关《第章 树与二叉树(20页珍藏版)》请在金锄头文库上搜索。
1、第六章 树和二叉树 树是一类重要的非线性数据结构,是以分支关系定义的层次结构5.1 树的定义定义v定义:树(tree)是n(n0)个结点的有限集T,其中:l有且仅有一个特定的结点,称为树的根(root)l当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree)v特点:l树中至少有一个结点根l树中各子树是互不相交的集合A只有根结点的树ABCDEFGHIJKLM有子树的树根子树基本术语v结点(node)表示树中的元素,包括数据项及若干指向其子树的分支v结点的度(degree)结点拥有的子树数v叶子(leaf)度为0的结点v孩
2、子(child)结点子树的根称为该结点的孩子v双亲(parents)孩子结点的上层结点叫该结点的v兄弟(sibling)同一双亲的孩子v树的度一棵树中最大的结点度数v结点的层次(level)从根结点算起,根为第一层,它的孩子为第二层v深度(depth)树中结点的最大层次数v森林(forest)m(m0)棵互不相交的树的集合ABCDEFGHIJKLM结点A的度:3结点B的度:2结点M的度:0叶子:K,L,F,G,M,I,J结点A的孩子:B,C,D结点B的孩子:E,F结点I的双亲:D结点L的双亲:E结点B,C,D为兄弟结点K,L为兄弟树的度:3结点A的层次:1结点M的层次:4树的深度:4结点F,G
3、为堂兄弟结点A是结点F,G的祖先树树的表示的表示的表示的表示 树型表示树型表示树型表示树型表示bacghdefij凹入表表示凹入表表示凹入表表示凹入表表示abdeijfcgh嵌套集合表示嵌套集合表示嵌套集合表示嵌套集合表示嵌套括号表示嵌套括号表示嵌套括号表示嵌套括号表示ijdfghabcea ( b ( d, e ( i, j ), c ( g, h ) ) )5.2 二叉树定义v定义:二叉树是n(n0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成v特点l每个结点至多有二棵子树(即不存在度大于2的结点)l二叉树的子树有左、右之分,且其次
4、序不能任意颠倒v基本形态A只有根结点的二叉树空二叉树AB右子树为空AB左子树为空ABC左、右子树均非空二叉树性质v性质1:证明:用归纳法证明之 i=1时,只有一个根结点, 是对的 假设对所有j(1j1,则其双亲是i/2 (2) 如果2in,则结点i无左孩子;如果2in,则其左孩子是2i (3) 如果2i+1n,则结点i无右孩子;如果2i+1n,则其右孩子是2i+15.3 树的存储结构树的存储结构v双亲表示法l实现:定义结构数组存放树的结点,每个结点含两个域:u数据域:存放结点本身信息u双亲域:指示本结点的双亲结点在数组中位置l特点:找双亲容易,找孩子难typedef struct node d
5、atatype data; int parent;JD;JD tM;abcdefhgiacdefghib012235551096012345789dataparent0号单元不用或存结点个数如何找孩子结点v孩子表示法l多重链表:每个结点有多个指针域,分别指向其子树的根u结点同构:结点的指针个数相等,为树的度Du结点不同构:结点指针个数不等,为该结点的度ddata child1 child2 . childDdata degree child1 child2 . childdl孩子链表:每个结点的孩子结点用单链表存储,再用含n个元素的结构数组指向每个孩子链表孩子结点:typedef struct
6、 node int child; /该结点在表头数组中下标 struct node *next; /指向下一孩子结点 JD;表头结点:typedef struct tnode datatype data; /数据域 struct node *fc; /指向第一个孩子结点 TD; TD tM; /t0不用abcdefhgi6012345789acdefghibdatafc 2 3 4 5 9 7 8 6如何找双亲结点l带双亲的孩子链表612345789acdefghibdatafc 2 3 4 5 9 7 8 6012235551parentabcdefhgiv孩子兄弟表示法(二叉树表示法)l实现:用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点l特点u操作容易u破坏了树的层次typedef struct node datatype data; struct node *fch, *nsib;JD;abcdefhgi a b c d e f g h i二叉树的存储结构v顺序存储结构l实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素l特点:u结点间关系蕴含在其存储位置中u浪费空间,适于存满二叉树和完全二叉树abcdefga b c d e 0 0 0 0 f g 1 2 3 4 5 6 7 8 9 10 11