数据结构:树形结构完整代码,各种遍历方法,直接能跑
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define TElemType int
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
typedef BiTree DataType;
typedef struct queuenode{
DataType data;
struct queuenode *next;
} QueueNode;
//LINKQUEUE
//HEAD POINTER, AND REAR POINTER ARE A V ALIBALE typedef struct {
QueueNode *front;
QueueNode *rear;
} LinkQueue;
int InitQueue(LinkQueue *Q);
int DestroyQueue(LinkQueue *Q);
int QueueEmpty(LinkQueue Q);
int EnQueue(LinkQueue *Q, DataType e);
DataType DeQueue(LinkQueue *Q);
int CreateBiTree(BiTree *T);
int PreOrderTraverse(BiTree T, int (*visit)(TElemType e));
int PreOrderTraverse2(BiTree T, int (*visit)(TElemType e));
int InOrderTraverse(BiTree T, int (*visit)(TElemType e));
int InOrderTraverse2(BiTree T, int (*visit)(TElemType e));
int PostOrderTraverse(BiTree T, int (*visit)(TElemType e));
int PostOrderTraverse2(BiTree T, int (*visit)(TElemType e)); int LevelOrderTraverse(BiTree T, int (*visit)(TElemType e)); int printElem(TElemType e);
int InitBiTree(BiTree *T);
int DestroyBiTree(BiTree *T);
int ClearBiTree(BiTree *T);
int BiTreeEmpty(BiTree T);
int BiTreeDepth(BiTree T);
BiTNode *Parent(BiTree T, BiTNode *e);
BiTNode *LeftChild(BiTree T, BiTNode *e);
BiTNode *RightChild(BiTree T, BiTNode *e);
BiTNode *LeftSibling(BiTree T, BiTNode *e);
BiTNode *RightSibling(BiTree T, BiTNode *e);
int InsertChild(BiTree T, BiTNode *p, int LR, BiTree C);
int DeleteChild(BiTree T, BiTNode *p, int LR);
int CountLeaf(BiTree T);
int CreateBiTreeByPreInOrder(BiTree *T, int preorder[], int *idx,
int inorder[], int low, int high,
int length);
int main()
{
BiTree bitree,bitree2;
InitBiTree(&bitree);
InitBiTree(&bitree2);
printf("input tree 1:\n");
CreateBiTree2(&bitree);
printf("PreOrderTraverse:\n");
PreOrderTraverse(bitree, printElem);
printf("\n");
printf("InOrderTraverse:\n");
InOrderTraverse(bitree, printElem);
printf("\n");
printf("PostOrderTraverse:\n");
PostOrderTraverse(bitree, printElem);
printf("\n");
printf("LevelOrderTraverse:\n");
LevelOrderTraverse(bitree, printElem);
printf("\n");
printf("Depth is %d.\n", BiTreeDepth(bitree));
printf("Count leaf is %d.\n", CountLeaf(bitree));
DestroyBiTree(&bitree);
DestroyBiTree(&bitree2);
}