//def.h
#define TRUE 1
#define OK 1
#define FLASE 0
#define ERROR 0
typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode, *BiTree;
Status CreateBiTree(BiTree &T);
Status AddBiTree(BiTree &T,TElemType e,char flag);
Status PreOrderTraverse(BiTree T,Status (* visit)(TElemType e));
Status InOrderTraverse(BiTree T,Status (* visit)(TElemType e));
Status PostOrderTraverse(BiTree T,Status (* visit)(TElemType e));
Status LevelOrderTraverse(BiTree T,Status (* visit)(TElemType e));
Status DepthTree(BiTree T);
//fun.cpp
#include "def.h"
#include
#include
using namespace std;
Status CreateBiTree(BiTree &T)
{
char s='s',l='l',r='r';
int n=1;
TElemType e;
cin>>e;
if(e == '^')T=NULL;
else
{
if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))
exit(-1);
T->data = e;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
Status PreOrderTraverse(BiTree T,Status (* visit)(TElemType e))
{
if(T)
{
if(visit(T->data))
if(PreOrderTraverse(T->lchild,visit))
if(PreOrderTraverse(T->rchild,visit))
return OK;
return ERROR;
}
else return OK;
}
Status InOrderTraverse(BiTree T,Status (* visit)(TElemType e))
{
if(T->lchild != NULL)
{
InOrderTraverse(T->lchild,visit);
}
if(!visit(T->data))
return ERROR;
if(T->rchild != NULL)
{
InOrderTraverse(T->rchild,visit);
}
return OK;
}
Status PostOrderTraverse(BiTree T,Status (* visit)(TElemType e))
{
if(T->lchild != NULL)
{
PostOrderTraverse(T->lchild,visit);
}
if(T->rchild != NULL)
{
PostOrderTraverse(T->rchild,visit);
}
if(!visit(T->data))
return ERROR;
return OK;
}
Status LevelOrderTraverse(BiTree T,Status (* visit)(TElemType e))
{
BiTree q[100];
q[0] = T;
int front = 0;
int rear = 1;
while(front{
if(q[front])
{
if(!visit(q[front]->data))
return ERROR;
q[rear++]=q[front]->lchild;
q[rear++]=q[front]->rchild;
front++;
}
else
{
front++;
}
}
return OK;
}
int DepthTree(BiTree T)
{
int dept=0;
if(T)
{
int Depth1 = DepthTree(T->lchild);
int Depth2 = DepthTree(T->rchild);
dept = Depth1>=Depth2?Depth1+1:Depth2+1;
}
return dept;
}
//main.cpp
#include "def.h"
#include
using namespace std;
Status PrintElement(TElemType e)
{
cout<return OK;
}
void main()
{
BiTree T;
int Dept=1;
cout<<"请先序输入二叉树中结点的值: (输入'^'表示空结点)"<CreateBiTree(T);
cout<PreOrderTraverse(T,PrintElement);
cout<InOrderTraverse(T,PrintElement);
cout<PostOrderTraverse(T,PrintElement);
cout<LevelOrderTraverse(T,PrintElement);
cout<system("pause");
}
//////////////////////////上面是遍历///////////////////////////////
以前写的,创建的时候输入的值是按先序遍历的顺序;你可以测试123^^4^^2^^^^
搜索的话随便用一种遍历,访问所有非叶子节点,只要访问的节点的子节点为要搜索的节点,则该节点为其父节点;
第二个搜索大概意思是找到所有n 删除给定节点左右节点就把左右节点指针指向NULL; 实际我倒是觉得搜索和删除都没什么意义,掌握了遍历都ok