二叉树的遍历(前序,中序,后序)

来源:互联网 发布:净水器 储水桶 知乎 编辑:程序博客网 时间:2024/05/22 01:35
/**Copyright(c) 2011,烟台大学计算机学院学生*All rights reserved.*文件名称:二叉树的遍历(前序,中序,后序)*作       者:Mr_chang*完成日期: 2012年 12月15 日*/#include <iostream>using namespace std;struct Btnode{ int d;              //数据域Btnode *lchild;   //左指针域Btnode *rchild;   //右指针域};//二叉链表类class Binary_Tree { private:Btnode *BT;    //二叉链表根结点指针public:   //成员函数  Binary_Tree() { BT=NULL; return; }  //二叉链表初始化  void creat_Binary_Tree(int);      //生成二叉链表  void pretrav_Binary_Tree(); //前序遍历二叉链表  void intrav_Binary_Tree();  //中序遍历二叉链表  void postrav_Binary_Tree(); //后序遍历二叉链表};static creat(Btnode *p, int k, int end){Btnode *q;int x;cin >>x;    //输入结点值if (x!=end)   //结点值为非结束符值 { q=new Btnode;   //申请一个二叉链表结点q->d=x; q->lchild=NULL; q->rchild=NULL; if (k==1) p->lchild=q;  //链接到左子树if (k==2) p->rchild=q;  //链接到右子树creat(q, 1, end);     //输入左子结点值creat(q, 2, end);     //输入右子结点值}return 0;}//生成二叉链表void Binary_Tree::creat_Binary_Tree(int end){ Btnode *p;int x;cin >>x;  //输入第一个结点值if (x==end) return;  //第一个值为结束符值p=new Btnode;   //申请二叉链表根结点p->d=x; p->lchild=NULL; p->rchild=NULL;BT=p;   //二叉树根结点creat(p, 1, end);  //输入左子结点值creat(p, 2, end);  //输入右子结点值return;}static pretrav(Btnode *p){ if (p!=NULL){ cout <<p->d <<"   ";  //输出根结点值pretrav(p->lchild);   //前序遍历左子树pretrav(p->rchild);   //前序遍历右子树}return 0;}//前序遍历二叉链表void Binary_Tree::pretrav_Binary_Tree(){ Btnode *p;p=BT;pretrav(p);   //从根结点开始前序遍历cout <<endl;return;}static intrav(Btnode *p){ if (p!=NULL){ intrav(p->lchild);      //中序遍历左子树cout <<p->d <<"   ";    //输出根结点值intrav(p->rchild);      //中序遍历右子树}return 0;}//中序遍历二叉链表void Binary_Tree::intrav_Binary_Tree(){ Btnode *p;p=BT;intrav(p);    //从根结点开始中序遍历cout <<endl;return;}static postrav(Btnode *p){ if (p!=NULL){ postrav(p->lchild);    //后序遍历左子树postrav(p->rchild);    //后序遍历右子树cout <<p->d <<"   ";   //输出根结点值}return 0;}//后序遍历二叉链表void Binary_Tree::postrav_Binary_Tree(){ Btnode *p;p=BT;postrav(p);     //从根结点开始后序遍历cout <<endl;return;}int main(){ Binary_Tree b;      //建立一个二叉树对象b,数据域为整型cout <<"输入各结点值(-1为结束符值):" <<endl;b.creat_Binary_Tree(-1); //从键盘输入二叉树各结点值,以-1作为结束值cout <<"前序序列:" <<endl;b.pretrav_Binary_Tree();  //前序遍历二叉树对象bcout <<"中序序列:" <<endl;b.intrav_Binary_Tree();   //中序遍历二叉树对象bcout <<"后序序列:" <<endl;b.postrav_Binary_Tree();  //后序遍历二叉树对象breturn 0;}


总结:static creat(Btnode *p, int k, int end)应放到void Binary_Tree::creat_Binary_Tree(int end)的前面定义!!

           static pretrav(Btnode *p)应放到void Binary_Tree::pretrav_Binary_Tree()的前面定义!!!

             同理。。。。。。。。