#include "stdio.h"
#include "stdlib.h"
#define new(Class) (Class*)malloc(sizeof(Class))
typedef struct node Node;
struct node{
Node *next;
Node *nextLayer; //有地址的话代表有下一层链表
int num;
};
//弄一个4层的多叉例子树
Node* createTree(){
//声明
Node* head;
Node* layer2;
Node* layer3_1;
Node* layer3_2;
//构造第一层(根)
head = new(Node);
head->num = 1;
head->next = NULL;
//构造第二层
layer2 = new(Node);
layer2->num = 2;
layer2->next = new(Node);
layer2->next->num = 3;
layer2->next->nextLayer = NULL;
layer2->next->next = new(Node);
layer2->next->next->num = 4;
layer2->next->next->next = NULL;
head->nextLayer = layer2; //根结点(num为1的结点)和第二层(num为2的结点)连接起来
//构造第三层_第一段
layer3_1 = new(Node);
layer3_1->num = 5;
layer3_1->nextLayer = NULL;
layer3_1->next = new(Node);
layer3_1->next->num = 6;
layer3_1->next->nextLayer = NULL;
layer3_1->next->next = NULL;
layer2->nextLayer = layer3_1; //第二层(num为2的结点)连接第三层_第一段(num为5的结点)
//构造第三层_第二段
layer3_2 = new(Node);
layer3_2->num = 7;
layer3_2->nextLayer = NULL;
layer3_2->next = new(Node);
layer3_2->next->num = 8;
layer3_2->next->nextLayer = NULL;
layer3_2->next->next = new(Node);
layer3_2->next->next->num = 9;
layer3_2->next->next->nextLayer = NULL;
layer3_2->next->next->next = new(Node);
layer3_2->next->next->next->num = 10;
layer3_2->next->next->next->nextLayer = NULL;
layer3_2->next->next->next->next = NULL;
layer2->next->next->nextLayer = layer3_2; //第二层(num为4的结点)连接第三层_第二段(num为7的结点)
return head;
}
//先序读取
void read(Node* head){
Node* cursor = head;
/**遍历每一个结点的数据,
遇到结点有下一层的直接调用本函数读当前结点的下一层,
下一层读完继续接着上次循环读下一个节点,建议画出递归流程理解 **/
while(cursor != NULL) {
printf("%d\n", cursor->num);
if(cursor->nextLayer != NULL) {
read(cursor->nextLayer);
}
cursor = cursor->next;
}
}
int main(){
read(createTree());
return 0;
}
一种多叉树的例子
最新推荐文章于 2024-08-20 14:41:36 发布