森林是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Žᷥⱘ䘡ग़乎ᑣ᳝ϸ ⾡ˈϔ⾡ᰃܜᑣ䘡ग़ˈेܜ䆓䯂ḍ㒧⚍ˈ✊ৢݡձ ⫼ৠḋⱘᮍ⊩䆓䯂↣ỉᄤᷥ˗ϔ⾡ᰃৢᑣ䘡ग़ˈे ձܜ
5.1.2树的存储结构 1.双亲表示法 树的双亲表示法主要描述的是结点的双亲关系。 西师滋大学数学与信息学院
5.1.2 ᷥⱘᄬټ㒧ᵘ 1. ঠ҆㸼⼎⊩ ᷥⱘঠ҆㸼⼎⊩Џ㽕ᦣ䗄ⱘᰃ㒧⚍ⱘঠ҆݇㋏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;