二叉树的遍历:前序、中序、后序

来源:互联网 发布:衢州市干部网络教育 编辑:程序博客网 时间:2024/05/13 06:28
#include<stdio.h>#include<stdlib.h>typedef struct Bintree{int data;struct Bintree *lchild;struct Bintree *rchild;}treenode,*b_tree;b_tree root=NULL;/* 函数的声明*/b_tree creat_tree(int n);void print1();void preorder(b_tree pointer);//前序遍历void print2();void inorder(b_tree pointer);//中序遍历void print3();void postorder(b_tree pointer);//后序遍历/*主函数*/int main(){int n;printf("please input nums of Bintrees'node:\n");scanf("%d",&n);/*creat a Bintree*/root=creat_tree(n);/*print 3 kinds of order*/print1();print2();print3();/*order a bintree*///preorder(root);//前序遍历//inorder(root);//中序遍历//postorder(root);//后序遍历system("pause");return 0;}/*函数的定义*/b_tree creat_tree(int n){int i;b_tree currentnode,parentnode,newnode;for(i=0;i<n;i++) {  newnode=malloc(sizeof(treenode));  if(!newnode) return;  printf("please intial num %d node:\n",i+1);  scanf("%d",&(newnode->data));  newnode->lchild=NULL;  newnode->rchild=NULL; if(i==0)   root=newnode; else  {   currentnode=root;   while(currentnode!=NULL)//当前节点进行遍历    {     parentnode=currentnode;//双亲节点即使最后的根节点用于和新节点连接     if(currentnode->data>newnode->data)       currentnode=currentnode->lchild;     else       currentnode=currentnode->rchild;    }   if(parentnode->data>newnode->data)      parentnode->lchild=newnode;   else      parentnode->rchild=newnode;  } }return root;}void print1(){printf("前序遍历:\n");preorder(root);printf("\n");}void print2(){printf("中序遍历:\n");inorder(root);printf("\n");}void print3(){printf("后序遍历:\n");postorder(root);printf("\n");}void preorder(b_tree pointer)//前序遍历{if(pointer!=NULL)//递归的条件 {  printf("[%d]=>",pointer->data);  preorder(pointer->lchild);  preorder(pointer->rchild); }}void inorder(b_tree pointer)//中序遍历{if(pointer!=NULL) {  inorder(pointer->lchild);  printf("[%d]=>",pointer->data);  inorder(pointer->rchild); }}void postorder(b_tree pointer)//后序遍历{if(pointer!=NULL) {  postorder(pointer->lchild);  postorder(pointer->rchild);  printf("[%d]=>",pointer->data); }}//另外一种程序#include<stdio.h>#include<stdlib.h>typedef struct Bintree{int data;struct Bintree *lchild;struct Bintree *rchild;}treenode,*b_tree;b_tree root=NULL;/* 函数的声明*/void creat_tree(int n);void print1();void preorder(b_tree pointer);//前序遍历void print2();void inorder(b_tree pointer);//中序遍历void print3();void postorder(b_tree pointer);//后序遍历/*主函数*/int main(){int n;printf("please input nums of Bintrees'node:\n");scanf("%d",&n);/*creat a Bintree*/creat_tree(n);/*print 3 kinds of order*/print1();print2();print3();/*order a bintree*///preorder(root);//前序遍历//inorder(root);//中序遍历//postorder(root);//后序遍历system("pause");return 0;}/*函数的定义*/void creat_tree(int n){int i;b_tree currentnode,parentnode,newnode;for(i=0;i<n;i++) {  newnode=malloc(sizeof(treenode));  if(!newnode) return;  printf("please intial num %d node:\n",i+1);  scanf("%d",&(newnode->data));  newnode->lchild=NULL;  newnode->rchild=NULL; if(i==0)   root=newnode; else  {   currentnode=root;   while(currentnode!=NULL)//当前节点进行遍历    {     parentnode=currentnode;//双亲节点即使最后的根节点用于和新节点连接     if(currentnode->data>newnode->data)       currentnode=currentnode->lchild;     else       currentnode=currentnode->rchild;    }   if(parentnode->data>newnode->data)      parentnode->lchild=newnode;   else      parentnode->rchild=newnode;  } }}void print1(){printf("前序遍历:\n");preorder(root);printf("\n");}void print2(){printf("中序遍历:\n");inorder(root);printf("\n");}void print3(){printf("后序遍历:\n");postorder(root);printf("\n");}void preorder(b_tree pointer)//前序遍历{if(pointer!=NULL)//递归的条件 {  printf("[%d]=>",pointer->data);  preorder(pointer->lchild);  preorder(pointer->rchild); }}void inorder(b_tree pointer)//中序遍历{if(pointer!=NULL) {  inorder(pointer->lchild);  printf("[%d]=>",pointer->data);  inorder(pointer->rchild); }}void postorder(b_tree pointer)//后序遍历{if(pointer!=NULL) {  postorder(pointer->lchild);  postorder(pointer->rchild);  printf("[%d]=>",pointer->data); }}