指引网

当前位置: 主页 > 编程开发 > C >

二叉树算法集

来源:网络 作者:佚名 点击: 时间:2017-07-19 23:01
[摘要] 

#include<stdlib.h>
#include<stdio.h>
#define MAX  50
#define MAS  20
#define CHAR 1
#if CHAR
   typedef char TElemType;
   TElemType Nil=' ';
   #define form "%c"
#else
   typedef int TElemType;
   TElemType Nil=0;
   #define form "%d"
#endif
typedef struct node
{TElemType data;
 struct node *left;
 struct node *right;
 struct node *parent;
}BiTNode,*BiTree;
BiTNode *InitBiTree(BiTNode *bt)
{
 bt=NULL;
 return bt;
}
BiTNode *CreateBiTree(BiTNode *bt)
{TElemType ch;
 scanf(form,&ch);
 if(ch==Nil) bt=NULL;
  else
  {bt=(BiTNode *)malloc(sizeof(BiTNode));
   if(!bt) exit(0);
   bt->data=ch; bt->parent=NULL;
   bt->left=CreateBiTree(bt->left);
   if(bt->left) bt->left->parent=bt;
   bt->right=CreateBiTree(bt->right);
   if(bt->right) bt->right->parent=bt;
  }
  return bt;
}
void PrintTree(BiTNode *bt,int i)
{ if(bt!=NULL)
  {PrintTree(bt->right,i+5);
   #if CHAR
    if(bt->data!=Nil)
    printf("%*cn",i,bt->data);
   #else
    if(bt->data!=Nil)
    printf("%*dn",i,bt->data);
   #endif
   PrintTree(bt->left,i+5);
   i=i-5;
  }
}
void Prorder1(BiTNode *bt,void(*visit)(TElemType))/*先序遍历*/
{if(bt!=NULL)
 {visit(bt->data);
  Prorder1(bt->left,visit);
  Prorder1(bt->right,visit);
 }
}
void Prorder2(BiTNode *bt,void(*visit)(TElemType))/*中序遍历*/
{BiTNode *p,*stack[MAS];
 int top;
 top=0;  p=bt;
 while(top!=0||p!=NULL)
 {while(p!=NULL)
  {stack[top]=p; top++;
   p=p->left;
  }
  if(top!=0)
  {p=stack[top-1];
   top--;
   visit(p->data);
   p=p->right;
  }
 }
}
void Prorder3(BiTNode *bt,void(*visit)(TElemType))/*后序遍历*/
{BiTNode *p,

------分隔线----------------------------