C语言数据结构算法——为儿子兄弟树的叶子结点赋值

Posted Z.Q.Feng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言数据结构算法——为儿子兄弟树的叶子结点赋值相关的知识,希望对你有一定的参考价值。


应用场景

对于叶子结点具有特定值的树,我们在用孩子兄弟链树表示时,需要把对应的叶子结点的值赋值上去,例如以下一棵树:

在使用孩子兄弟链树表示时,需要我们为叶子结点赋值,例如以凹入表示法输出此树:


我们还能根据孩子兄弟树的特殊结构求解结点下所有叶子结点的值总和。


数据结构

#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 n = CountLeafs(bt), a[MaxSize];
cout << "Please enter " << n << " leaf's data : ";
for (i = 0; i < n; i++)
	scanf("%d", &a[i]);
*/
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语言数据结构算法——孩子兄弟链树(注释完整:创建、销毁、叶子结点赋值、求树高)

以上是关于C语言数据结构算法——为儿子兄弟树的叶子结点赋值的主要内容,如果未能解决你的问题,请参考以下文章

树的孩子兄弟表示法实例(C++实现的)

数据结构(C语言版) 查找 算法设计Demo5

算法导论——斐波那契堆

数据结构算法设计——统计二叉树叶子结点的个数,并输出结果

跪求!!10分奉上!统计二叉树结点个数的算法 非递归

树的基本概念及算法