二叉树的递归遍历

#include<iostream>
#include<stack>
using namespace std;
/*二叉树的前序遍历,按照  根节点->左孩子->右孩子

*/

typedef struct node
{
    char data;
    struct node *lchild,*rchild;
}BinTree;
void creatBinTree(BinTree * &root){    
    char ch;
    if(ch=getchar()){
        if(ch=='#')
        root=NULL;
    else{
        root=new BinTree;
        root->data=ch;
        creatBinTree(root->lchild);
        creatBinTree(root->rchild);
    }
 }
}
//创建二叉树,
//递归遍历
void preOrder1(BinTree *&root){  //root是指向BinTree的结构体变量
    if(root){
        cout<<root->data<<" ";
        preOrder1(root->lchild);
        preOrder1(root->rchild);
    }
}
//非递归操作

void InOrder(BinTree * & root){
    if(root){
        InOrder(root->lchild);
        cout<<root->data<<" ";
        InOrder(root->rchild);
    }
}
void PostOrder(BinTree * &root){
    if(root){
        PostOrder(root->lchild);
        PostOrder(root->rchild);
        cout<<root->data<<" ";
    }
}
int main(){        
        BinTree * root;
        creatBinTree(root);
        cout<<"前序遍历:";
        preOrder1(root);
        cout<<endl;
        cout<<"中序遍历:";
        InOrder(root);
        cout<<endl;
        cout<<"后序遍历:";
        PostOrder(root);
        cout<<endl;
        system("pause");
    return 0;
}

比如输入 

AB##C##

前序:A B C

中序:B A C

后序:B C A

posted @ 2015-06-24 20:24  咸咸的告别  阅读(210)  评论(0编辑  收藏  举报