二叉树的建立和遍历还是主要是递归调用的问题。
static DoubleTree CreateTree()
{
int ch;
DoubleTree tree = NULL;
scanf("%d", &ch);
if(ch==0){
tree = NULL;
}else{
tree = (DoubleTree)malloc(sizeof(struct DoubleTreeNode));
if(tree==NULL){
fprintf(stderr, "there is no space\n");
return NULL;
}
tree->element = ch;
tree->LeftNode = CreateTree();//会先将所有的左子树建立好
tree->RightNode = CreateTree();//递归补充又子树
}
return tree;
}
我奇怪的是传入的DoubleTree tree这个指针,结果传出来的还是NULL
static void CreateTree(DoubleTree tree)
{
int ch;
//DoubleTree tree = NULL;
scanf("%d", &ch);
if(ch==0){
tree = NULL;
}else{
tree = (DoubleTree)malloc(sizeof(struct DoubleTreeNode));
if(tree==NULL){
fprintf(stderr, "there is no space\n");
return;
}
tree->element = ch;
CreateTree(tree->LeftNode);//会先将所有的左子树建立好
CreateTree(tree->RightNode);//递归补充又子树
}
return;
}
这个应该和函数传入的参数有关,先暂时放在这里
-------------------------------------------------------------------------------------

普通二叉树的先序遍历(头-->左--->右)
void PreTraverse(DoubleTree tree)
{
if(tree){
printf("%d\n", tree->element);
PreTraverse(tree->LeftNode);
PreTraverse(tree->RightNode);
}
return;
}

中序遍历(左--->中--->右)
static void MidTraverse(DoubleTree tree)
{
if(tree){
MidTraverse(tree->LeftNode);
printf("%d\n", tree->element);
MidTraverse(tree->RightNode);
}
return;
}

后序遍历(左--->右---->中)
static void LastTravese(DoubleTree tree)
{
if(tree){
LastTravese(tree->LeftNode);
LastTravese(tree->RightNode);
printf("%d\n", tree->element);
}
return ;
}