今天我来分享一下有关树的一些简单应用。
首先我们需要三个头文件:tree.h queue.h stack.h
#pragma once
#include<stdio.h>
#include<assert.h>
#include<Windows.h>
typedef char DataType;
typedef struct TreeNode{
struct TreeNode *lchild;
struct TreeNode *rchild;
DataType data;
} TreeNode;
TreeNode *CreateNode(DataType data)
{
TreeNode *pRoot=(TreeNode *)malloc(sizeof(TreeNode));
pRoot->data=data;
pRoot->lchild=0;
pRoot->rchild=0;
}
TreeNode *CreatTree(DataType preOrder[], int size, int *pIndex)
{
TreeNode *pRoot = CreateNode(preOrder[*pIndex]);
if (*pIndex >= size) {
return NULL;
}
if (preOrder[*pIndex] == '#') {
*pIndex += 1;
return NULL;
}
*pIndex += 1; // 用了 1 个字符
pRoot->lchild = CreatTree(preOrder, size, pIndex);
pRoot->rchild = CreatTree(preOrder, size, pIndex);
return pRoot;
}
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef TreeNode* DataType3;
typedef struct Node{
DataType3 data;
struct Node *Next;
}Node;
typedef struct Queue{
Node *pFront;
Node *pRear;
int size;
}Queue;
//队列初始化。
void QueueInit(Queue *q)
{
assert(q);
q->pFront=q->pRear=NULL;
q->size=0;
}
//队列的入队。
void QueuePush(Queue *pq,TreeNode* data)
{
Node *pNew=(Node *)malloc(sizeof(Node));
pq->size++;
assert(pq);
pNew->data=data;
pNew->Next=NULL;
if(pq->pRear==NULL)
{
pq->pRear=pNew;
pq->pFront=pNew;
}
else{
pq->pRear->Next=pNew;
pq->pRear=pNew;
}
}
//出队
void QueuePop(Queue *pq)
{
Node *p=pq->pFront;
assert(pq);
if(pq->pFront==NULL)
{
pq->pRear=NULL;
}
else{
pq->size--;
pq->pFront=p->Next;
free(p);
}
}
//取头结点
DataType3 QueuepFront(Queue *pq)
{
assert(pq);
assert(pq->size>0);
return pq->pFront->data;
}
//求是否为空队列。1为空,0不为空。
int QueueI