关于二叉树的一些操作

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值