新建二叉树并实现基础遍历

//创建一棵树并实现各种遍历 
#include <iostream>
#include<stack>
#include<queue>
#include<malloc.h>
#define MAXSIZE 500
using namespace std;
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//  创建二叉树,约定用户遵照前序遍历输入数据(#代表空结点)
//  ABDH##I##E##CF#J##G##
/*
         A
       /  \
      B    C
     / \  / \
    D  E  F  G
   / \    \
  H  I    J  
*/
//递归创建二叉树(输入的结点序列为二叉树的先序遍历序列) 
void CreateBiTree(BiTree *T){
    char c;
    cin>>c;
    if(c=='#'){
        *T = NULL;
    }else{
        *T = (BiTNode*)malloc(sizeof(BiTNode));
        (*T)->data = c;	//*T找到该结点 
        CreateBiTree(&(*T)->lchild);	
        CreateBiTree(&(*T)->rchild);
    }
}
//先序遍历(递归)
void PreOrder(BiTree T){
	if(T!=NULL){
		cout<<T->data<<"->";
		PreOrder(T->lchild);
		PreOrder(T->rchild);
	}
} 
//中序遍历(递归) 
void InOrder(BiTree T){
	if(T!=NULL){
		InOrder(T->lchild);
		cout<<T->data<<"->";
		InOrder(T->rchild);
	}
}
//后序遍历(递归) 
void PostOrder(BiTree T){
	if(T!=NULL){
		PostOrder(T->lchild);
		PostOrder(T->rchild);
		cout<<T->data<<"->";
	}
} 
//层序遍历 
void LevelOrder(BiTree T){   
    if(!T){
        cout<<"空树!"<<endl;
        return;
    }
    BiTree p;
    queue<BiTree> Q;
    Q.push(T);	//先将根结点入队 
    while(!Q.empty()){
        p=Q.front();	//取队头元素 
        Q.pop();	//将队头元素出栈 
		cout<<p->data<<"->";	//输出该结点的值之后将该结点的孩子结点入队 
        if(p->lchild!=NULL)
            Q.push(p->lchild);
        if(p->rchild!=NULL)
            Q.push(p->rchild);
    } 
}

int main()
{
    int level = 1;
    BiTree T = NULL;
    CreateBiTree(&T);
    cout<<"层序遍历:"; 
	LevelOrder(T);
	cout<<endl; 
	cout<<"先序遍历:";
    PreOrder(T);
    cout<<endl;
    cout<<"中序遍历:";
    InOrder(T); 
    cout<<"后序遍历:";
	PostOrder(T);
	cout<<endl; 
    return 0;
}
发布了44 篇原创文章 · 获赞 1 · 访问量 2319

猜你喜欢

转载自blog.csdn.net/Do_________/article/details/102082276