69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
typedef int Elem;
typedef struct NTree
{
Elem data;
struct NTree *lchild,*rchild ;
}NTree,*BiTree;
typedef struct PTNode
{
Elem data;
int parent; // Ë«Ç×λÖÃÓò
}PTNode,*PNode;
typedef struct PTree
{
PNode nodes[20];//½áµã×î´óÊýÁ¿Îª20
int n; // ½áµã¸öÊý
bool done[20];
}PTree,*Tree;
/*******************ʵÏÖ·½·¨ÈçÏÂ*********************************/
void addTree(Tree &t,PNode node);
//¹¹ÔìË«Ç×½áµãµÄÊ÷
void InitTree(Tree &t);
void InitTree(Tree &t)
{
t=(PTree*)malloc(sizeof(PTree)); //ÕâÊÇΪɶÄØ
t->n=0;
for(int i = 0;i <20;i++)
{
t->nodes[i]=(PTNode*)malloc(sizeof(PTNode));
t->done[i] = false;
}
}
void CreateTree(Tree &t)
{
int n=t->n;
//¼Ç¼½áµãµÄ¸öÊý;
PTNode *node=NULL;
node=(PTNode*)malloc(sizeof(PTNode));
node->data=1;
node->parent=-1;
addTree(t,node);//1
PTNode *node2=(PTNode*)malloc(sizeof(PTNode));
node2->data=2;
node2->parent=0;
addTree(t,node2);//2
PTNode *node3=(PTNode*)malloc(sizeof(PTNode));
node3->data=3;
node3->parent=0;
addTree(t,node3);//3
PTNode *node4=(PTNode*)malloc(sizeof(PTNode));
node4->data=4;
node4->parent=0;
addTree(t,node4);//4
PTNode *node5=(PTNode*)malloc(sizeof(PTNode));
node5->data=5;
node5->parent=2;
addTree(t,node5);//5
PTNode *node6=(PTNode*)malloc(sizeof(PTNode));
node6->data=6;
node6->parent=2;
addTree(t,node6);//6
PTNode *node7=(PTNode*)malloc(sizeof(PTNode));
node7->data=7;
node7->parent=5;
addTree(t,node7);//7
printf("%d\n",t->n);
//½¨Ê÷Ò»¹²ÓÐ7¸ö½áµã
}
void addTree(Tree &t,PNode node)
{
int n=t->n;
int pa=node->parent;
if(pa>n)
printf("½áµãÐÅÏ¢ÓдíÎó");
t->nodes[n]->data=node->data;
t->nodes[n]->parent=node->parent;
t->n++;//½ÚµãÊý×ÔÔö
}
void ToBinaryTree(Tree t,BiTree &tree,int where)//¸üнáµãµÄλÖÃ
{//°Ñwhere½áµã¸³Öµ¸øtree È»ºóÑ°ÕÒ×ó×ÓÊ÷ºÍÓÒ×ÓÊ÷
int i=where+1;
int con=1;
int pa=t->nodes[where]->parent;
//printf("%d\n",pa);
//¸÷½Úµã³õʼ»¯
tree->data=t->nodes[where]->data;//¸³Öµ¸ù½Úµã->
tree->lchild = NULL;
tree->rchild = NULL;
for(int j=i;j <t->n;j++)
{
if (t->done[j] == false)
{
if(t->nodes[j]->parent==pa&&con==1)//˵Ã÷ÓÐÐÖµÜ
{
tree->rchild=(BiTree)malloc(sizeof(NTree));
ToBinaryTree(t,tree->rchild,j);
con=0;
}
if(t->nodes[j]->parent==where)//Ñ°ÕÒ×ó
{
tree->lchild=(BiTree)malloc(sizeof(NTree));
ToBinaryTree(t,tree->lchild,j);//µÚÒ»¸ö×ÓÊ÷Ϊ×ó×ÓÊ÷
}
}
}
t->done[where] = true;
}
void Preorder(BiTree T)
{
printf("%d\n",T->data);
if(T->lchild)
{
printf("lchild=");
Preorder(T->lchild);
}
if(T->rchild)
{
printf("rchild=");
Preorder(T->rchild);
}
}
void main()
{
Tree t;
InitTree(t);
int n=t->n;
printf("%d\n",n);
BiTree T;
T=(BiTree)malloc(sizeof(NTree));
//int n;
//LinkStack *s;
CreateTree(t);
printf("½¨Ê÷Íê³É\n");
ToBinaryTree(t,T,0);
printf("Íê³Éת»»\n");
printf("Ç°Ðò±éÀú½á¹ûÊÇ:\n");
Preorder(T);
printf("Êä³öÍê³É");
}
for(int i = 0;i <20;i++)
{
t->nodes[i]=(PTNode*)malloc(sizeof(PTNode));
t->done[i] = false;
}
typedef struct PTree
{
PNode nodes[20];//½áµã×î´óÊýÁ¿Îª20
int n; // ½áµã¸öÊý
bool done[20];
}PTree,*Tree;
void ToBinaryTree(Tree t,BiTree &tree,int where)//¸üнáµãµÄλÖÃ
{//°Ñwhere½áµã¸³Öµ¸øtree È»ºóÑ°ÕÒ×ó×ÓÊ÷ºÍÓÒ×ÓÊ÷
int i=where+1;
int con=1;
int pa=t->nodes[where]->parent;
//printf("%d\n",pa);
//¸÷½Úµã³õʼ»¯
tree->data=t->nodes[where]->data;//¸³Öµ¸ù½Úµã->
tree->lchild = NULL;
tree->rchild = NULL;
for(int j=i;j <t->n;j++)
{
if (t->done[j] == false)
{
if(t->nodes[j]->parent==pa&&con==1)//˵Ã÷ÓÐÐÖµÜ
{
tree->rchild=(BiTree)malloc(sizeof(NTree));
ToBinaryTree(t,tree->rchild,j);
con=0;
}
if(t->nodes[j]->parent==where)//Ñ°ÕÒ×ó
{
tree->lchild=(BiTree)malloc(sizeof(NTree));
ToBinaryTree(t,tree->lchild,j);//µÚÒ»¸ö×ÓÊ÷Ϊ×ó×ÓÊ÷
}
}
}
t->done[where] = true;
}
void Preorder(BiTree T)
{
printf("%d\n",T->data);
if(T->lchild)
{
printf("lchild=");
Preorder(T->lchild);
}
if(T->rchild)
{
printf("rchild=");
Preorder(T->rchild);
}
}