头文件linkTree.h
#ifndef _LINKTREE_H
#define _LINKTREE_H
#include <stdio.h>
#include <stdlib.h>
typedef char Data;
typedef struct LinkTree
{
Data data;
struct LinkTree *lchild;
struct LinkTree *rchild;
}LinkTree,*PLinkTree;
PLinkTree linkTree_Create();//创建
void linkTree_First(PLinkTree root);//先序遍历
void linkTree_Middle(PLinkTree root);//中序遍历
void linkTree_Behind(PLinkTree root);//后序遍历
void linkTree_Level(PLinkTree root);//层次遍历,需要借助链队,将PLinkTree重命名为Data,并加入相应头文件
#endif
实现文件linkTree.c
include "linkTree.h"
PLinkTree linkTree_Create()//创建
{
char ch;
scanf("%c",&ch);
if(c=='#')
{
return NULL;
}
PLinkTree root = (PLinkTree)malloc(sizeof(LinkTree));
if(root==NULL)
{
perror("Create fail");
return NULL;
}
root->data=ch;
root->lchild=linkTree_Create();
root->rchild=linkTree_Create();
return root;
}
void linkTree_First(PLinkTree root)//先序遍历
{
if(root==NULL)
{
perror("LinkTree is NULL");
return;
}
printf("%c",root->data);
linkTree_First(root->lchild);
linkTree_First(root->rchild);
}
void linkTree_Middle(PLinkTree root)//中序遍历
{
if(root==NULL)
{
perror("LinkTree is NULL");
return;
}
linkTree_Middle(root);
printf("%c",root->data);
linkTree_Middle(root);
}
void linkTree_Behind(PLinkTree root)//后序遍历
{
if(root==NULL)
{
perror("LinkTree is NULL");
return;
}
linkTree_Behind(root->lchild);
linkTree_Behind(root->rchild);
printf("%c",root->data);
}
void linkTree_Level(PLinkTree root)//层次遍历,需要借助链队,将PLinkTree重命名为Data,并加入相应头文件
{
if(root==NULL)
{
perror("LinkTree is NULL");
return;
}
PLinkQueue head = linkQueue_Create();
linkQueue_In(head,root);
while(linkQueue_JudgeEmpty(head)!=1)
{
PLinkTree linkTreeNode = linkQueue_Out(head);
printf("%c",linkTreeNode->data);
if(linkTreeNode->lchild!=NULL)
{
linkQueue_In(head,linkTreeNode->lchild);
}
if(linkTreeNode->rchild!=NULL)
{
linkQueue_In(head,linkTreeNode->rchild);
}
}
}
实现层次遍历相应改动如下
linkTree.c 添加(若将此代码添加到linkTree.h可能会导致重复定义)
#include "linkQueue.h"
linkQueue.h添加
#include "linkTree.h"
typedef PLinkTree Data;
若有错误欢迎指正(*^▽^*)