这种存储方法的特点是寻找结点的双亲很容易, 但寻找结点的孩子比较困难。 算法实现举例: int Parent(ParentTree T,int node) i if(node<olnode>=T n)return -2 else return T. itemnode. parent 西师滋大学数学与信息学院
䖭⾡ᄬټᮍ⊩ⱘ⡍⚍ᰃᇏᡒ㒧⚍ⱘঠ҆ᕜᆍᯧˈ Ԛᇏᡒ㒧⚍ⱘᄽᄤ↨䕗ೄ䲒DŽ ㅫ⊩ᅲ⦄В՟˖ int Parent(ParentTree T,int node) { if (node<0||node>=T.n) return -2; else return T.item[node].parent; }
2.孩子表示法 孩子表示法主要描述的是结点的孩子关系。由于 每个结点的孩子个数不定,所以利用链式存储结构更 加适宜。举例: 西师滋大学数学与信息学院
2. ᄽᄤ㸼⼎⊩ ᄽᄤ㸼⼎⊩Џ㽕ᦣ䗄ⱘᰃ㒧⚍ⱘᄽᄤ݇㋏DŽ⬅Ѣ ↣Ͼ㒧⚍ⱘᄽᄤϾ᭄ϡᅮˈ᠔ҹ߽⫼䫒ᓣᄬټ㒧ᵘ ˖䗖ᅰDŽВ՟ࡴ
root-0A 2B 3 345 EDF 6 17|89 789 H 图5-4 西师滋大学数学与信息学院
5-4 root 0 A 2 1 4 ^ 1 C ^ 2 B 3 5 ^ 3 E ^ 4 D 6 ^ 5 F ^ 6 G 7 8 9 ^ 7 H ^ 8 I ^ 9 J ^
在C语言中,这种存储形式定义如下: #define max tree node size 1o typedef struct ChildNodet int child; 该孩子结点在一维数组中的下标值 struct Chilenode *nex;∥指向下一个孩子结点 JCNode typedef struct( TEntry Type info;/结点信息 Node *firstchild;/指向第一个孩子结点的指针 INOde, 西师滋大学数学与信息学院
C䇁㿔Ёˈ䖭⾡ᄬټᔶᓣᅮНབϟ˖ #define MAX_TREE_NODE_SIZE 10 typedef struct ChildNode{ int child; //䆹ᄽᄤ㒧⚍ϔ㓈᭄㒘Ёⱘϟᷛؐ struct ChileNode *next; //ᣛϟϔϾᄽᄤ㒧⚍ }CNode; typedef struct{ TEntryType info; //㒧⚍ֵᙃ CNode *firstchild; //ᣛϔϾᄽᄤ㒧⚍ⱘᣛ䩜 }TNode;
typedef struct TNode item MAX TREE NODE SIZE int n root: /n为树中当前结点的数目,ro.根结点在一维 数组中的位置 )ChildRe 这种存储结构的特点是寻找某个结点的孩子比较 容易,但寻找双亲比较麻烦,所以,在必要的时候, 可以将双亲表示法和孩子表示法结合起来,即将一维 数组元素增加一个表示双亲结点的域 parent,用来指 示结点的双亲在一维数组中的位置。 西师滋大学数学与信息学院
typedef struct { TNode item[MAX_TREE_NODE_SIZE]; int n,root; //nЎᷥЁᔧࠡ㒧⚍ⱘ᭄ⳂˈrootЎḍ㒧⚍ϔ㓈 ᭄㒘Ёⱘԡ㕂 }ChildTree; 䖭⾡ᄬټ㒧ᵘⱘ⡍⚍ᰃᇏᡒᶤϾ㒧⚍ⱘᄽᄤ↨䕗 ᆍᯧˈԚᇏᡒঠ҆↨䕗咏⚺ˈ᠔ҹˈᖙ㽕ⱘᯊˈ ৃҹᇚঠ҆㸼⼎⊩ᄽᄤ㸼⼎⊩㒧ড়䍋ᴹˈेᇚϔ㓈 ᭄㒘ܗ㋴ࡴϔϾ㸼⼎ঠ҆㒧⚍ⱘඳparentˈ⫼ᴹᣛ ⼎㒧⚍ⱘঠ҆ϔ㓈᭄㒘Ёⱘԡ㕂DŽ