#include <stdio.h>
#include <stdlib.h>
typedef struct node//二叉树链表存储结构的类型定义
{
int data;//数据域
struct node* lchild;//指针域,指向左孩子节点
struct node* rchild;//指针域,指向右孩子节点
}*BiTree, BiTNode;
BiTree InitBiTree(BiTNode* root)//初始化构造一个新的二叉树,传入一个指向节点的指针。
{
BiTree tree = root;
return tree;
}
BiTNode* MakeNode(int data, BiTNode* lchild, BiTNode* rchild)//生成节点
{
BiTNode* pnode = (BiTNode*)malloc(sizeof(BiTNode));
if (pnode!=NULL)
{
pnode->data = data;
pnode->lchild = lchild;
pnode->rchild = rchild;
}
return pnode;
}
void FreeNode(BiTNode* pnode)//释放节点
{
if (pnode!=NULL)
{
free(pnode);
pnode = NULL;
}
return;
}
void DestroyBiTree(BiTree tree)//销毁一棵二叉树
{
BiTNode* pnode = tree;
if (pnode->lchild!=NULL)
{
DestroyBiTree(pnode->lchild);
}
if (pnode->rchild!=NULL)
{
DestroyBiTree(pnode->rchild);
}
FreeNode(pnode);
return;
}
int IsEmpty(BiTree tree)//判断是否为空
{
if (tree==NULL)
{
return 1;
}
else
{
return 0;
}
}
int GetDepth(BiTree tree)//返回树的深度
{
int cd, ld, rd;
cd = 0;
ld = 0;
rd = 0;
if (tree!=NULL)
{
ld = GetDepth(tree->lchild);
rd = GetDepth(tree->rchild);
cd = (ld > rd ? ld : rd);
return cd + 1;
}
else
{
return 0;
}
}
BiTree GetRoot(BiTree tree)//返回根
{
return tree;
}
int GetData(BiTNode* pnode)//返回节点值
{
return pnode->data;
}
void SetData(BiTNode* pnode, int data)//设置节点值
{
pnode->data = data;
return;
}
BiTree SetLchild(BiTree parent, BiTree lchild)//设置左子树
{
parent->lchild = lchild;
return lchild;
}
BiTree SetRchild(BiTree parent, BiTree rchild)//设置右子树
{
parent->rchild = rchild;
return rchild;
}
BiTree GetLchild(BiTree tree)//返回左子树
{
if (tree!=NULL)
{
return tree->lchild;
}
else
{
return NULL;
}
}
BiTree GetRchild(BiTree tree)//返回右子树
{
if (tree!=NULL)
{
return tree->rchild;
}
else
{
return NULL;
}
}
BiTree InsertChild(BiTree parent, int lr, BiTree child)//插入新子树
{
if (parent!=NULL)
{
if (lr==0&&parent->lchild==NULL)
{
parent->lchild = child;
return child;
}
if (lr==1&&parent->rchild==NULL)
{
parent->rchild = child;
return child;
}
}
else
{
return NULL;
}
}
void DeleteChild(BiTree parent, int lr)//删除子树
{
if (parent!=NULL)
{
if (lr==0&parent->lchild!=NULL)
{
FreeNode(parent->lchild);
parent->lchild = NULL;
}
if (lr==1&&parent->rchild!=NULL)
{
FreeNode(parent->rchild);
parent->rchild = NULL;
}
}
else
{
return;
}
}
void PreOrderTravers(BiTNode* root)//先序遍历
{
if (root!=NULL)
{
printf("%c ", root->data);
PreOrderTravers(root->lchild);
PreOrderTravers(root->rchild);
}
return;
}
void InOrderTravers(BiTNode* root)//中序遍历
{
if (root!=NULL)
{
InOrderTravers(root->lchild);
printf("%c ", root->data);
InOrderTravers(root->rchild);
}
return;
}
void PostOrderTravers(BiTNode* root)
{
if (root!=NULL)
{
PostOrderTravers(root->lchild);
PostOrderTravers(root->rchild);
printf("%c ", root->data);
}
return;
}
int main()
{
BiTNode* G = MakeNode('G', NULL, NULL);
BiTNode* H = MakeNode('H', NULL, NULL);
BiTNode* I = MakeNode('I', NULL, NULL);
BiTNode* J = MakeNode('J', NULL, NULL);
BiTNode* D = MakeNode('D', NULL, G);
BiTNode* E = MakeNode('E', H, I);
BiTNode* F = MakeNode('F', NULL, J);
BiTNode* B = MakeNode('B', D, E);
BiTNode* C = MakeNode('C', F, NULL);
BiTNode* A = MakeNode('A', B, C);
printf("先序遍历:");
PreOrderTravers(B);
printf("\n");
printf("中序遍历:");
PreOrderTravers(A);
printf("\n");
printf("先序遍历:");
PreOrderTravers(A);
printf("\n");
system("pause");
return 0;
}
#include <stdlib.h>
typedef struct node//二叉树链表存储结构的类型定义
{
int data;//数据域
struct node* lchild;//指针域,指向左孩子节点
struct node* rchild;//指针域,指向右孩子节点
}*BiTree, BiTNode;
BiTree InitBiTree(BiTNode* root)//初始化构造一个新的二叉树,传入一个指向节点的指针。
{
BiTree tree = root;
return tree;
}
BiTNode* MakeNode(int data, BiTNode* lchild, BiTNode* rchild)//生成节点
{
BiTNode* pnode = (BiTNode*)malloc(sizeof(BiTNode));
if (pnode!=NULL)
{
pnode->data = data;
pnode->lchild = lchild;
pnode->rchild = rchild;
}
return pnode;
}
void FreeNode(BiTNode* pnode)//释放节点
{
if (pnode!=NULL)
{
free(pnode);
pnode = NULL;
}
return;
}
void DestroyBiTree(BiTree tree)//销毁一棵二叉树
{
BiTNode* pnode = tree;
if (pnode->lchild!=NULL)
{
DestroyBiTree(pnode->lchild);
}
if (pnode->rchild!=NULL)
{
DestroyBiTree(pnode->rchild);
}
FreeNode(pnode);
return;
}
int IsEmpty(BiTree tree)//判断是否为空
{
if (tree==NULL)
{
return 1;
}
else
{
return 0;
}
}
int GetDepth(BiTree tree)//返回树的深度
{
int cd, ld, rd;
cd = 0;
ld = 0;
rd = 0;
if (tree!=NULL)
{
ld = GetDepth(tree->lchild);
rd = GetDepth(tree->rchild);
cd = (ld > rd ? ld : rd);
return cd + 1;
}
else
{
return 0;
}
}
BiTree GetRoot(BiTree tree)//返回根
{
return tree;
}
int GetData(BiTNode* pnode)//返回节点值
{
return pnode->data;
}
void SetData(BiTNode* pnode, int data)//设置节点值
{
pnode->data = data;
return;
}
BiTree SetLchild(BiTree parent, BiTree lchild)//设置左子树
{
parent->lchild = lchild;
return lchild;
}
BiTree SetRchild(BiTree parent, BiTree rchild)//设置右子树
{
parent->rchild = rchild;
return rchild;
}
BiTree GetLchild(BiTree tree)//返回左子树
{
if (tree!=NULL)
{
return tree->lchild;
}
else
{
return NULL;
}
}
BiTree GetRchild(BiTree tree)//返回右子树
{
if (tree!=NULL)
{
return tree->rchild;
}
else
{
return NULL;
}
}
BiTree InsertChild(BiTree parent, int lr, BiTree child)//插入新子树
{
if (parent!=NULL)
{
if (lr==0&&parent->lchild==NULL)
{
parent->lchild = child;
return child;
}
if (lr==1&&parent->rchild==NULL)
{
parent->rchild = child;
return child;
}
}
else
{
return NULL;
}
}
void DeleteChild(BiTree parent, int lr)//删除子树
{
if (parent!=NULL)
{
if (lr==0&parent->lchild!=NULL)
{
FreeNode(parent->lchild);
parent->lchild = NULL;
}
if (lr==1&&parent->rchild!=NULL)
{
FreeNode(parent->rchild);
parent->rchild = NULL;
}
}
else
{
return;
}
}
void PreOrderTravers(BiTNode* root)//先序遍历
{
if (root!=NULL)
{
printf("%c ", root->data);
PreOrderTravers(root->lchild);
PreOrderTravers(root->rchild);
}
return;
}
void InOrderTravers(BiTNode* root)//中序遍历
{
if (root!=NULL)
{
InOrderTravers(root->lchild);
printf("%c ", root->data);
InOrderTravers(root->rchild);
}
return;
}
void PostOrderTravers(BiTNode* root)
{
if (root!=NULL)
{
PostOrderTravers(root->lchild);
PostOrderTravers(root->rchild);
printf("%c ", root->data);
}
return;
}
int main()
{
BiTNode* G = MakeNode('G', NULL, NULL);
BiTNode* H = MakeNode('H', NULL, NULL);
BiTNode* I = MakeNode('I', NULL, NULL);
BiTNode* J = MakeNode('J', NULL, NULL);
BiTNode* D = MakeNode('D', NULL, G);
BiTNode* E = MakeNode('E', H, I);
BiTNode* F = MakeNode('F', NULL, J);
BiTNode* B = MakeNode('B', D, E);
BiTNode* C = MakeNode('C', F, NULL);
BiTNode* A = MakeNode('A', B, C);
printf("先序遍历:");
PreOrderTravers(B);
printf("\n");
printf("中序遍历:");
PreOrderTravers(A);
printf("\n");
printf("先序遍历:");
PreOrderTravers(A);
printf("\n");
system("pause");
return 0;
}