struct NODE
{
int iData;
struct NODE *pLeft;
struct NODE *pRight;
};
根节点为pRoot
Status Search(BiTree T,int n)
{
if(!T) return ERROR;
if(n==T->data)
return OK;
else if(n<T->data)
return Search(T->lchild,n);
else
return Search(T->rchild,n);
}
Status Insert(BiTree &T, ElemType e)
{
BiTree B;
if(!Search(T,e))
{
if(!T)
{
B = (BiTree )malloc(sizeof(BiTNode));
B->data = e;
B->lchild = B->rchild = NULL;
T=B;
}
//
else if (e < T->data) Insert(T->lchild ,e); //T->lchild = B;
else Insert(T->rchild ,e);// = B;
return OK;
}
else return ERROR;
}
Status CreateBiTree(BiTree &T) { // 算法6.4
// 构造二叉链表表示的二叉树T。
int n,i;
int ch;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&ch);
Insert(T,ch);
}
return OK;
} // CreateBiTree
Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
// 前序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
//补全代码,可用多个语句
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit)) return OK;
return ERROR;
} else return OK;
} // PreOrderTraverse
Status InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
// 中序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
//补全代码,可用多个语句
if(T){
if(InOrderTraverse(T->lchild,Visit))
if(Visit(T->data))
if(InOrderTraverse(T->rchild,Visit))return OK;
return ERROR;
}else return OK;
} // InOrderTraverse
Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
// 后序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
//补全代码,可用多个语句
if(T){
if(PostOrderTraverse(T->lchild,Visit))
if(PostOrderTraverse(T->rchild,Visit))
if(Visit(T->data))return OK;
return ERROR;
}else return OK;
} // PostOrderTraverse
Status NonRecursiveTraverse( BiTree T, Status(*Visit)(ElemType) ){
SqStack S;
InitStack(S);
BiTree p=T;
while(p||!StackEmpty(S)){
if(p){Push(S,p); p=p->lchild;}
else{
Pop(S,p); if(!Visit(p->data)) return ERROR;
p=p->rchild;
}
}
return OK;
}
{
int iData;
struct NODE *pLeft;
struct NODE *pRight;
};
根节点为pRoot
Status Search(BiTree T,int n)
{
if(!T) return ERROR;
if(n==T->data)
return OK;
else if(n<T->data)
return Search(T->lchild,n);
else
return Search(T->rchild,n);
}
Status Insert(BiTree &T, ElemType e)
{
BiTree B;
if(!Search(T,e))
{
if(!T)
{
B = (BiTree )malloc(sizeof(BiTNode));
B->data = e;
B->lchild = B->rchild = NULL;
T=B;
}
//
else if (e < T->data) Insert(T->lchild ,e); //T->lchild = B;
else Insert(T->rchild ,e);// = B;
return OK;
}
else return ERROR;
}
Status CreateBiTree(BiTree &T) { // 算法6.4
// 构造二叉链表表示的二叉树T。
int n,i;
int ch;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&ch);
Insert(T,ch);
}
return OK;
} // CreateBiTree
Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
// 前序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
//补全代码,可用多个语句
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit)) return OK;
return ERROR;
} else return OK;
} // PreOrderTraverse
Status InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
// 中序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
//补全代码,可用多个语句
if(T){
if(InOrderTraverse(T->lchild,Visit))
if(Visit(T->data))
if(InOrderTraverse(T->rchild,Visit))return OK;
return ERROR;
}else return OK;
} // InOrderTraverse
Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
// 后序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
//补全代码,可用多个语句
if(T){
if(PostOrderTraverse(T->lchild,Visit))
if(PostOrderTraverse(T->rchild,Visit))
if(Visit(T->data))return OK;
return ERROR;
}else return OK;
} // PostOrderTraverse
Status NonRecursiveTraverse( BiTree T, Status(*Visit)(ElemType) ){
SqStack S;
InitStack(S);
BiTree p=T;
while(p||!StackEmpty(S)){
if(p){Push(S,p); p=p->lchild;}
else{
Pop(S,p); if(!Visit(p->data)) return ERROR;
p=p->rchild;
}
}
return OK;
}