第5章树和二叉树 本章中主要介绍下列内容: 树的逻辑定义和存储结构 叉树的逻辑定义、存储结构 二叉树的基本操作算法 树和二叉树的转换 哈夫曼树及其应用 西师滋大学数学与信息学院 限出
ぜ5【 ᵀλࣸᵀ ᴀゴЁЏ㽕ҟ㒡ϟ߫ݙᆍ˖ l ᷥⱘ䘏䕥ᅮНᄬټ㒧ᵘ l Ѡঝᷥⱘ䘏䕥ᅮНǃᄬټ㒧ᵘ l Ѡঝᷥⱘᴀ᪡ㅫ⊩ l ᷥѠঝᷥⱘ䕀ᤶ l જ᳐ᷥঞ݊ᑨ⫼ ߎ䗔
1树 5.1.1树的定义和基本运算 1.定义 树是一种常用的非线性结构。我们可以这样定 义:树是n(n≥0)个结点的有限集合。若n=0,则称 为空树;否则,有且仅有一个特定的结点被称为根, 当n>1时,其余结点被分成m(m>0)个互不相交的子 集T1,T2,…,Tm,每个子集又是一棵树。由此可以 看出,树的定义是递归。 西师滋大学数学与信息学院 网图
5.1 ᷥ 5.1.1 ᷥⱘᅮНᴀ䖤ㅫ 1. ᅮН ᷥᰃϔ⾡ᐌ⫼ⱘ䴲㒓ᗻ㒧ᵘDŽ៥Ӏৃҹ䖭ḋᅮ Н˖ᷥᰃn˄nı0˅Ͼ㒧⚍ⱘ᳝䰤䲚ড়DŽ㢹n=0ˈ߭⿄ Ўぎᷥ˗৺߭ˈ᳝Ϩҙ᳝ϔϾ⡍ᅮⱘ㒧⚍㹿⿄Ўḍˈ ᔧn>1ᯊˈ݊ԭ㒧⚍㹿ߚ៤m˄m>0˅ϾѦϡⳌѸⱘᄤ 䲚T1ˈT2ˈ...ˈTmˈ↣Ͼᄤ䲚জᰃϔỉᷥDŽ⬅ℸৃҹ ⳟߎᷥˈⱘᅮНᰃ䗦ᔦDŽ
结点数据元素的内容及其指向其子树根的分支统 称为结点。 结点的度结点的分支数。 终端结点(叶子)度为0的结点。 非终端结点度不为0的结点。 结点的层次树中根结点的层次为1,根结点子树 的根为第2层,以此类推。 树的度树中所有结点度的最大值。 树的深度树中所有结点层次的最大值。 有序树、无序树如果树中每棵子树从左向右的排 列拥有一定的顺序,不得互换,则称为有序树,否则 称为无序树。 西师滋大学数学与信息学院
㒧⚍ ᭄ܗ㋴ⱘݙᆍঞ݊ᣛ݊ᄤᷥḍⱘߚᬃ㒳 ⿄Ў㒧⚍DŽ 㒧⚍ⱘᑺ 㒧⚍ⱘߚᬃ᭄DŽ 㒜ッ㒧⚍˄ᄤ˅ ᑺЎ0ⱘ㒧⚍DŽ 䴲㒜ッ㒧⚍ ᑺϡЎ0ⱘ㒧⚍DŽ 㒧⚍ⱘሖ ᷥЁḍ㒧⚍ⱘሖЎ1ˈḍ㒧⚍ᄤᷥ ⱘḍЎ2ሖˈҹℸ㉏DŽ ᷥⱘᑺ ᷥЁ᠔᳝㒧⚍ᑺⱘ᳔ؐDŽ ᷥⱘ⏅ᑺ ᷥЁ᠔᳝㒧⚍ሖⱘ᳔ؐDŽ ᳝ᑣᷥǃ᮴ᑣᷥ བᵰᷥЁ↣ỉᄤᷥҢᎺেⱘᥦ ߫ᢹ᳝ϔᅮⱘ乎ᑣˈϡᕫѦᤶˈ߭⿄Ў᳝ᑣᷥˈ৺߭ ⿄Ў᮴ᑣᷥDŽ
森林是m(m≥0)棵互不相交的树的集合。 在树结构中,结点之间的关系又可以用家族关系 描述,定义如下: 孩子、双亲结点子树的根称为这个结点的孩 子,而这个结点又被称为孩子的双亲。 子孙以某结点为根的子树中的所有结点都被称 为是该结点的子孙。 祖先从根结点到该结点路径上的所有结点 兄弟同一个双亲的孩子之间互为兄弟。 堂兄弟双亲在同一层的结点互为堂兄弟。 西师滋大学数学与信息学院
Ểᵫ ᰃm˄mı0˅ỉѦϡⳌѸⱘᷥⱘ䲚ড়DŽ ᷥ㒧ᵘЁˈ㒧⚍П䯈ⱘ݇㋏জৃҹ⫼ᆊᮣ݇㋏ ᦣ䗄ˈᅮНབϟ˖ ᄽᄤǃঠ҆ 㒧⚍ᄤᷥⱘḍ⿄Ў䖭Ͼ㒧⚍ⱘᄽ ᄤˈ㗠䖭Ͼ㒧⚍জ㹿⿄Ўᄽᄤⱘঠ҆DŽ ᄤᄭ ҹᶤ㒧⚍ЎḍⱘᄤᷥЁⱘ᠔᳝㒧⚍䛑㹿⿄ Ўᰃ䆹㒧⚍ⱘᄤᄭDŽ ⼪ܜ Ңḍ㒧⚍ࠄ䆹㒧⚍䏃ᕘϞⱘ᠔᳝㒧⚍DŽ ܘᓳ ৠϔϾঠ҆ⱘᄽᄤП䯈ѦЎܘᓳDŽ ූܘᓳ ঠ҆ৠϔሖⱘ㒧⚍ѦЎූܘᓳDŽ
2.树的基本运算 常用操作: 1)构造一个树 Createtree(T 2)清空以T为根的树 Cleartree( (3)判断树是否为空 Treeempty(T (4)获取给定结点的第i个孩子 Childe(T, node i) (5)获取给定结点的双亲 Parent(T,node) (6)遍历树 Traverse(T) 对树遍历的主要目的是将非线性结构通过遍历过程 线性化,即获得一个线性序列。树的遍历顺序有两 种,一种是先序遍历,即先访问根结点,然后再依次 用同样的方法访问每棵子树;另一种是后序遍历,即 先依 西师滋大学数学与信息学院
2. ᷥⱘᴀ䖤ㅫ ᐌ⫼᪡˖ ˄1˅ ᵘ䗴ϔϾᷥ CreateTree (T) ˄2˅⏙ぎҹTЎḍⱘᷥ ClearTree(T) ˄3˅߸ᮁᷥᰃ৺Ўぎ TreeEmpty(T) ˄4˅㦋প㒭ᅮ㒧⚍ⱘiϾᄽᄤ Child(T,node,i) ˄5˅㦋প㒭ᅮ㒧⚍ⱘঠ҆ Parent(T,node) ˄6˅䘡ग़ᷥTraverse(T) ᇍᷥ䘡ग़ⱘЏ㽕Ⳃⱘᰃᇚ䴲㒓ᗻ㒧ᵘ䗮䖛䘡ग़䖛 㒓ᗻ࣪ेˈ㦋ᕫϔϾ㒓ᗻᑣ߫DŽᷥⱘ䘡ग़乎ᑣ᳝ϸ ⾡ˈϔ⾡ᰃܜᑣ䘡ग़ˈेܜ䆓䯂ḍ㒧⚍ˈ✊ৢݡձ ⫼ৠḋⱘᮍ⊩䆓䯂↣ỉᄤᷥ˗ϔ⾡ᰃৢᑣ䘡ग़ˈे ձܜ
下标 info paren 012345678 ABCDEFGH 000 G)④ 3666 图5-3 西师滋大学数学与信息学院
5-3 ϟᷛ info paren t 0 A -1 1B 0 2C 0 3D 0 4E 1 5F 1 6G 3 7H 6 8I 6 9J 6 H I J E F G B C D A A B C D E F G HIJ
类型定义 #define maX Tree node size 100 typedef struct i TEntry Type info; int parent; 3 ParentNode typedef struct ParentNode itemMAX TREE NODE SIZE ntn;/树中当前的结点数目 3 Parenttree; 西师滋大学数学与信息学院
㉏ൟᅮН˖ #define MAX_TREE_NODE_SIZE 100 typedef struct { TEntryType info; int parent; } ParentNode; typedef struct { ParentNode item[MAX_TREE_NODE_SIZE]; int n; //ᷥЁᔧࠡⱘ㒧⚍᭄Ⳃ }ParentTree;