获取给定结点第个孩子的操作算法实现: int Child( ChildTree T, int node, int if (node<o node >=T n return-2 p=T item node. firstchild;j=1; while(p&&j=i p=p->next; j++ if(∴p) return-2; else return p->child; 西师滋大学数学与信息学院
㦋প㒭ᅮ㒧⚍iϾᄽᄤⱘ᪡ㅫ⊩ᅲ⦄˖ int Child(ChildTree T, int node, int i) { if (node<0||node>=T.n) return -2˗ p=T.item[node].firstchild; j=1; while (p&&j!=i) { p=p->next; j++;} if (!p) return -2; else return p->child; }
孩子兄弟表示法 孩子兄弟表示法也是一种链式存储结构。它通过 描述每个结点的一个孩子和兄弟信息来反映结点之间 的层次关系,其结点结构为: firstchild item nextsibli ng 其中, firstchild为指向该结点第一个孩子的指针, nextsibling为指向该结点的下一个兄弟,item是数据元素 内容。举例 西师滋大学数学与信息学院
3. ᄽᄤܘᓳ㸼⼎⊩ ᄽᄤܘᓳ㸼⼎⊩гᰃϔ⾡䫒ᓣᄬټ㒧ᵘDŽᅗ䗮䖛 ᦣ䗄↣Ͼ㒧⚍ⱘϔϾᄽᄤܘᓳֵᙃᴹড㒧⚍П䯈 ⱘሖ݇㋏ˈ݊㒧⚍㒧ᵘЎ˖ firstchild item nextsibli ng ݊ЁˈfirstchildЎᣛ䆹㒧⚍ϔϾᄽᄤⱘᣛ䩜ˈ nextsiblingЎᣛ䆹㒧⚍ⱘϟϔϾܘᓳˈitemᰃ᭄ܗ㋴ ˖ᆍDŽВ՟ݙ
T A B ACD 十AF ^H^∏个J个 图5-5 西师滋大学数学与信息学院
5-5 ^ H ^ I ^ J ^ ^ E ^ F ^ G ^ B ^ C D ^ A ^ T
在C语言中,这种存储形式定义如下 typedef struct CSNodel Entry Type item; struct CSNode * firstchild, "nextsibling JCSNode, stree; void AllChild( StRee T, stRee p /输出树中p指针所指结点的所有孩子信息 g=p->fisrtchild; print(%Gc”, g->item);q=q→> nextsibling; 西师滋大学数学与信息学院
C䇁㿔Ёˈ䖭⾡ᄬټᔶᓣᅮНབϟ˖ typedef struct CSNode{ EntryType item; struct CSNode *firstchild,*nextsibling; }CSNode,*CSTree; void AllChild(CSTree T, CSTree p) //䕧ߎᷥЁpᣛ䩜᠔ᣛ㒧⚍ⱘ᠔᳝ᄽᄤֵᙃ { q=p->fisrtchild; while (q) { printf(³%c´,q->item); q=q->nextsibling; } }
,2二叉树 5.2.1二又树的定义和基本运算 1.定义 定义:二叉树是另一种树形结构。它与树形结构 的区别是: 1)每个结点最多有两棵子树; (2)子树有左右之分 叉树也可以用递归的形式定义。即:二叉树是n (n≥0)个结点的有限集合。当n=0时,称为空二叉 树;当n>0时,有且仅有一个结点为二叉树的根,其余 结点被分成两个互不相交的子集,一个作为左子集, 另一个作为右子集,每个子集又是一个二叉树。 西师滋大学数学与信息学院
5.2 Ѡঝᷥ 5.2.1 ѠঝᷥⱘᅮНᴀ䖤ㅫ 1. ᅮН ᅮН˖Ѡঝᷥᰃϔ⾡ᷥᔶ㒧ᵘDŽᅗϢᷥᔶ㒧ᵘ ⱘऎ߿ᰃ˖ ˄1˅↣Ͼ㒧⚍᳔᳝ϸỉᄤᷥ˗ ˄2˅ᄤ᳝ᷥᎺেПߚDŽ Ѡঝᷥгৃҹ⫼䗦ᔦⱘᔶᓣᅮНDŽे˖Ѡঝᷥᰃn ˄nı0˅Ͼ㒧⚍ⱘ᳝䰤䲚ড়DŽᔧn=0ᯊˈ⿄ЎぎѠঝ ᷥ˗ᔧn>0ᯊˈ᳝Ϩҙ᳝ϔϾ㒧⚍ЎѠঝᷥⱘḍˈ݊ԭ 㒧⚍㹿ߚ៤ϸϾѦϡⳌѸⱘᄤ䲚ˈϔϾЎᎺᄤ䲚ˈ ϔϾЎেᄤ䲚ˈ↣Ͼᄤ䲚জᰃϔϾѠঝᷥDŽ