二叉树

来源:互联网 发布:flashfxp mac 破解版 编辑:程序博客网 时间:2024/04/19 22:52

二叉树的定义是一种递归定义。满二叉树与完全二叉树的定义与区别。
typedef struct btreenod
{
 elemtype data;
 struct btreenode *LC;
 struct btreenode *RC;
} bnode;
bnode *BT;

1、二叉树的先序遍历算法
void preorder(bnode *BT)
{
 if(BT==NULL)
  return;
 else
 {
  visit(BT);
  if(BT->LC!=NULL) preorder(BT->LC);
  if(BT->RC!=NULL) preorder(BT->RC);
 }
}
2、二叉树的中序遍历算法
void inorder(bnode *BT)
{
 if(BT==NULL)
  return;
 else
 {
  if(BT->LC!=NULL) inorder(BT->LC);
  visit(BT);
  if(BT->RC!=NULL) inorder(BT->RC);  
 }
}
3、二叉树的后序遍历算法
void postorder(bnode *BT)
{ if(BT==NULL)
  return;
 else
 {
  if(BT->LC!=NULL) postorder(BT->LC);
  if(BT->RC!=NULL) postorder(BT->RC);
  visit(BT);
 }
}

由二叉树可以获得三种遍历序列。
由两种遍历序列可以重构二叉树。

×××生成二叉树的算法×××
void Creat_Binary_Sort_tree(bnode ** proot)
{
 bnode *p,*q;
 elemtype kl
 int i,n;
 *proot=NULL;
 printf("intput n:");
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  p=(bnode *)malloc(sizeof(bnode));
  p->LC=NULL;
  p->RC=NULL;
  printf("input k:");
  scanf("%d",&k);
  if(*proot=NULL)
   *proot=p;
  else
  {
   q=*proot;
   while(q!=NULL)
   {
    if(q->data>k)
     if(q->LC!=NULL)
      q=q->LC;
     else
     {
      q->LC=p;
      q=NULL;
     } 
    
    if(q->data<k)
     if(q->RC!=NULL)
      q=q->RC;
     else
     {
      q->RC=p;
      q=NULL;
     }
   }
  }
 }
}

原创粉丝点击