二叉树的代码实现及操作:
数据结构与算法系列---二叉树 #include < malloc.h >
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 #define OK 1
数据结构与算法系列---二叉树 #define ERROR 0
数据结构与算法系列---二叉树 #define OVERFLOW -2
数据结构与算法系列---二叉树 #define TURE 1
数据结构与算法系列---二叉树 #define FALSE 0
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 #define QMAXSIZE 20
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 typedef int TElemType;
数据结构与算法系列---二叉树 typedef struct BiTNode
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 TElemType data;
数据结构与算法系列---二叉树 int flag;
数据结构与算法系列---二叉树 struct BiTNode *lchild,*rchild;
数据结构与算法系列---二叉树 } BiTNode, * BiTree;
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 // 创建一棵二叉树
数据结构与算法系列---二叉树 int CreateTree(BiTree & T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 int ch;
数据结构与算法系列---二叉树 printf("input a char:");
数据结构与算法系列---二叉树 scanf("%d",&ch);
数据结构与算法系列---二叉树 if(ch==0)
数据结构与算法系列---二叉树 T=NULL;
数据结构与算法系列---二叉树 else
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 T=(BiTree)malloc(sizeof(BiTNode));
数据结构与算法系列---二叉树 if(!T)
数据结构与算法系列---二叉树 return ERROR;
数据结构与算法系列---二叉树 T->data=ch;
数据结构与算法系列---二叉树 CreateTree(T->lchild);
数据结构与算法系列---二叉树 CreateTree(T->rchild);
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 return OK;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 创建二叉树的数组
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 int TreeArray[ 15 ] = ... {1,2,3,0,0,4,5,0,6,0,0,7,0,0,0} ;
数据结构与算法系列---二叉树 // 计数
数据结构与算法系列---二叉树 int counter = 0 ;
数据结构与算法系列---二叉树 // 由数组创建一棵二叉树
数据结构与算法系列---二叉树 BiTree DefaultCreate()
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 int ch=TreeArray[counter++];
数据结构与算法系列---二叉树 BiTree root;
数据结构与算法系列---二叉树 if(ch==0)
数据结构与算法系列---二叉树 root=NULL;
数据结构与算法系列---二叉树 else
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 root=(BiTree)malloc(sizeof(BiTNode));
数据结构与算法系列---二叉树 if(!root)
数据结构与算法系列---二叉树 return ERROR;
数据结构与算法系列---二叉树 root->data=ch;
数据结构与算法系列---二叉树 root->lchild=DefaultCreate();
数据结构与算法系列---二叉树 root->rchild=DefaultCreate();
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 return root;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 创建一棵二叉树
数据结构与算法系列---二叉树 BiTree CreateBiTree()
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 int ch;
数据结构与算法系列---二叉树 BiTree root;
数据结构与算法系列---二叉树 printf("input a char:");
数据结构与算法系列---二叉树 scanf("%d",&ch);
数据结构与算法系列---二叉树 if(ch==0)
数据结构与算法系列---二叉树 root=NULL;
数据结构与算法系列---二叉树 else
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 root=(BiTree)malloc(sizeof(BiTNode));
数据结构与算法系列---二叉树 if(!root)
数据结构与算法系列---二叉树 return ERROR;
数据结构与算法系列---二叉树 root->data=ch;
数据结构与算法系列---二叉树 root->lchild=CreateBiTree();
数据结构与算法系列---二叉树 root->rchild=CreateBiTree();
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 return root;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 先序遍历(递归算法)
数据结构与算法系列---二叉树 void PreOrderTraverse(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 if(T!=NULL)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 printf("%d ,",T->data);
数据结构与算法系列---二叉树 PreOrderTraverse(T->lchild);
数据结构与算法系列---二叉树 PreOrderTraverse(T->rchild);
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 先序遍历(非递归算法)
数据结构与算法系列---二叉树 void PreOrderTraverse2(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 BiTree Q[20];
数据结构与算法系列---二叉树 BiTree p=T;
数据结构与算法系列---二叉树 int top=-1;
数据结构与算法系列---二叉树 while(p||top>-1)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 while(p)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 printf("%d, ",p->data);
数据结构与算法系列---二叉树 Q[++top]=p;
数据结构与算法系列---二叉树 p=p->lchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 if(top>-1)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 p=Q[top--];
数据结构与算法系列---二叉树 p=p->rchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 中序遍历二叉树(递归算法)
数据结构与算法系列---二叉树 void InOrderTraverse(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 if(T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 InOrderTraverse(T->lchild);
数据结构与算法系列---二叉树 printf("%d ,",T->data);
数据结构与算法系列---二叉树 InOrderTraverse(T->rchild);
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 中序遍历(非递归算法)
数据结构与算法系列---二叉树 void InOrderTraverse2(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 BiTree Q[20];
数据结构与算法系列---二叉树 BiTree p=T;
数据结构与算法系列---二叉树 int top=-1;
数据结构与算法系列---二叉树 while(p||top>-1)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 while(p)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 Q[++top]=p;
数据结构与算法系列---二叉树 p=p->lchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 if(top>-1)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 p=Q[top--];
数据结构与算法系列---二叉树 printf("%d, ",p->data);
数据结构与算法系列---二叉树 p=p->rchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 后序遍历二叉树(递归算法)
数据结构与算法系列---二叉树 void PostOrderTraverse(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 if(T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 PostOrderTraverse(T->lchild);
数据结构与算法系列---二叉树 PostOrderTraverse(T->rchild);
数据结构与算法系列---二叉树 printf("%d ,",T->data);
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 后序遍历(非递归算法)
数据结构与算法系列---二叉树 void PostOrderTraverse2(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 int flag[20];
数据结构与算法系列---二叉树 BiTree Q[20],p=T;
数据结构与算法系列---二叉树 int top=-1;
数据结构与算法系列---二叉树 while(p||top>-1)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 while(p)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 Q[++top]=p;
数据结构与算法系列---二叉树 flag[top]=0;
数据结构与算法系列---二叉树 p=p->lchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 if(top>-1)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 if(flag[top]==0&&Q[top]->rchild)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 flag[top]=1;
数据结构与算法系列---二叉树 p=Q[top]->rchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 else
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 printf("%d, ",Q[top]->data);
数据结构与算法系列---二叉树 top--;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 广度优先遍历
数据结构与算法系列---二叉树 void BFTraverse(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 BiTree Q[QMAXSIZE],p=T;
数据结构与算法系列---二叉树 int front=0,rear=0;
数据结构与算法系列---二叉树 Q[rear++]=p;
数据结构与算法系列---二叉树 while(front!=rear)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 p=Q[front];
数据结构与算法系列---二叉树 front=(front+1)%QMAXSIZE;
数据结构与算法系列---二叉树 printf("%d, ",p->data);
数据结构与算法系列---二叉树 if(p->lchild)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 Q[rear]=p->lchild;
数据结构与算法系列---二叉树 rear=(rear+1)%QMAXSIZE;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 if(p->rchild)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 Q[rear]=p->rchild;
数据结构与算法系列---二叉树 rear=(rear+1)%QMAXSIZE;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 void BiTLink_Ancestor2(BiTree T, int x)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 BiTree stack[20];
数据结构与算法系列---二叉树 BiTNode *q=T;
数据结构与算法系列---二叉树 int top=-1,i;
数据结构与算法系列---二叉树 while(1)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 while(q)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 ++top;
数据结构与算法系列---二叉树 stack[top]=q;
数据结构与算法系列---二叉树 stack[top]->flag=0;
数据结构与算法系列---二叉树 q=q->lchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 if(top==-1)
数据结构与算法系列---二叉树 return;
数据结构与算法系列---二叉树 if(stack[top]->flag==0&&stack[top]->rchild)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 stack[top]->flag=1;
数据结构与算法系列---二叉树 q=stack[top]->rchild;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 else
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 if(stack[top]->data==x)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 i=0;
数据结构与算法系列---二叉树 while(i<top)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 printf("%d, ",stack[i]->data);
数据结构与算法系列---二叉树 i++;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 return;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 top--;
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 // 交换左右结点(递归算法)
数据结构与算法系列---二叉树 void BiTree_ExchangeNode(BiTree T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 BiTNode *p;
数据结构与算法系列---二叉树 if(T)
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ...{
数据结构与算法系列---二叉树 p=T->lchild;
数据结构与算法系列---二叉树 T->lchild=T->rchild;
数据结构与算法系列---二叉树 T->rchild=p;
数据结构与算法系列---二叉树 BiTree_ExchangeNode(T->lchild);
数据结构与算法系列---二叉树 BiTree_ExchangeNode(T->rchild);
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 }
数据结构与算法系列---二叉树 int main( int argc, char * argv[])
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 ... {
数据结构与算法系列---二叉树 BiTree root=NULL;
数据结构与算法系列---二叉树 // CreateTree(root);
数据结构与算法系列---二叉树 // root=CreateBiTree();
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 root=DefaultCreate();
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 printf("preorder is: ");
数据结构与算法系列---二叉树 PreOrderTraverse(root);
数据结构与算法系列---二叉树 PreOrderTraverse2(root);
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 printf(" inorder is: ");
数据结构与算法系列---二叉树 InOrderTraverse(root);
数据结构与算法系列---二叉树 InOrderTraverse2(root);
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 printf(" post order is: ");
数据结构与算法系列---二叉树 PostOrderTraverse(root);
数据结构与算法系列---二叉树 PostOrderTraverse2(root);
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树
数据结构与算法系列---二叉树 return OK;
数据结构与算法系列---二叉树 }