应用场景数据结构为叶子结点赋值
应用场景
对于叶子结点具有特定值的树,我们在用孩子兄弟链树表示时,需要把对应的叶子结点的值赋值上去,例如以下一棵树:
在使用孩子兄弟链树表示时,需要我们为叶子结点赋值,例如以凹入表示法输出此树:
我们还能根据孩子兄弟树的特殊结构求解结点下所有叶子结点的值总和。
数据结构
#define MaxSize 50 char str[MaxSize] = "A(B(C(D,E),L(M,N)),G,H(I,J(K)))"; //孩子兄弟链式存储结构 typedef struct tnode{ char name; int data; //叶子结点包含数据 struct tnode *hp; //指向兄弟 struct tnode *vp; //指向孩子结点 }TSBNode;
为叶子结点赋值
首先把各叶子结点的值按照从左往右放入一个数组:
int a[MaxSize] = {12, 10, 3, 11, 9, 13, 20};
赋值函数如下:
int index = 0; //为该树的叶子结点赋值 void AssignLeafs(TSBNode *&bt, int a[MaxSize]){ if (bt){ if (!bt->vp){ bt->data = a[index]; index++; AssignLeafs(bt->hp, a); } else{ AssignLeafs(bt->vp, a); AssignLeafs(bt->hp, a); } } }
其中 index 要在函数外赋值作为全局变量,孩子兄弟树的创建可参考我的另一篇博客:C语言创建销毁儿子兄弟链树、以凹入表示法输出树、查看儿子兄弟链树高度
我们可以根据赋值后的孩子兄弟树,求各结点下的叶子值总和,这里我就不放出来啦,可参考我上传的资源:C语言数据结构算法——孩子兄弟链树(注释完整:创建、销毁、叶子结点赋值、求树高)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)