#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; }
一种多叉树的例子
猜你喜欢
转载自blog.csdn.net/cjzjolly/article/details/80031081
今日推荐
周排行