实现一种创建二叉树的方法。输入形式如下:8 7 3 1 # 5 6 2 4 # # # # 9 @,@代表输入结束,#代表此节点为空。
实现方法:
1.遍历输入数组,若当前为
1.若输入第一个字符为@,则返回空树
2.将第一字符生成树节点,作为树的根节点,并将其放入一个字符队列queue中
3.遍历输入字符数组
a.若当前输入为@,则结束程序并返回根节点
b.取出队列中字符,若为#,则遍历循环变量+2,并继续遍历
c.取出队列中字符,将当前输入字符生成树节点并作为队列字符中的左节点,并入队;若下一个输入为@,则结束并返回,否则将下一个作为队列的右节点,并入队
#include <stdio.h>
#include "Queue.h"
typedef elemType_Tree char;
typedef struct myTreeNode
{
elemType_Tree data;
struct myTreeNode *right;
struct myTreeNode *left;
}Tree;
Tree *CreateTreeNode(elemType_Tree data)
{
Tree *newNode = (Tree *)malloc(sizeof(Tree));
if(newNode == NULL)
{
printf("There is not enough memory to create a new tree node !\n");
eixt(1);
}else
{
newNode->data = data;
newNode->right = NULL;
newNode->left = NULL;
}
return newNode;
}
Tree *CreateTree(elemType_Tree input[], Tree *T)
{
Queue queue;
Queue *q = &queue;
int i = 0;
elemType_Tree QueueHead;
if(input[0] == '@' || input[0] == '#')
{
return T;
}else
{
T = CreateTreeNode(input[0]);
enQueue(q,intput[0]);
}
i = 1;
while(input[i] != '@')
{
QueueHead = outQueue(q);
??????
i ++;
}
clearQueue(q);
return T;
}
int main()
{
elemType_Tree input[] = "8731#5624####9@";
Tree *T = NULL;
T = CreateTree(input,T);
return 0;
}