已知树的层序和节点的度,用二叉链表法建树
先将数组转化,再两个for循环就可以搞定了
#include<bits/stdc++.h>
using namespace std ;
typedef struct Node{
int data ;
Node *lchild ,*rchild ;
}Node ,*Bi_Tree;
Bi_Tree Create (int level[] ,int indegree[] ,int n ){
Bi_Tree r[99];
for(int i = 0 ;i < n; i++ ){//将层序数组转为节点数组,方便指针链接
r[i] = (Bi_Tree)malloc(sizeof(Node));
r[i]->data = level[i];
r[i]->lchild = r[i]->rchild = NULL;
}
int q = 1 ;//确定孩子节点
for(int i = 0 ;i< n ; i++ ){
int ind = indegree[i] ;//当前节点的度
if(ind != 0 ){
r[i] ->lchild = r[q] ;//先确定做孩子
q ++ ;//后移动
for(int j = 1;j<ind;j++ ){//度不为 0 ,剩下的节点都是兄弟
r[q-1]->rchild = r[q];//确定兄弟
q++ ;
}
}
}
return r[0] ;
}
int main(){
return 0;
}