二叉树的先序,中序,后序(递归、非递归版本)(一)

二叉树的结构

typedef struct{
    char val;
    struct Binode *lchild;
    struct Binode *rchild;
}Binode;

一、递归情况下实现

示例:进行先序、中序、后序以及层次遍历

#include<iostream>
#include<queue>
#include<stdlib.h>
using namespace std;

typedef char ElemType;

typedef  struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

//二叉树的建立,按前序遍历的方式建立二叉树
void CreateBiTree(BiTree &T)
{
    ElemType ch;
    cin >> ch;
    if (ch == '#')
        T = NULL;  //保证是叶结点
    else
    {
        T = (BiTree)malloc(sizeof(BiTNode));
        (T)->data = ch;
        CreateBiTree(T->lchild);//构造左子树
        CreateBiTree(T->rchild);//构造右子树    
    }
}


//递归方式前序遍历二叉树
void PreOrderTraverse(BiTree T)
{
    if (T == NULL)
        return;
    cout<<T->data; 
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);
}

//递归方式中序遍历二叉树
void InOrderTraverse(BiTree T)
{
    if(T==NULL)
       return;
    InOrderTraverse(T->lchild);
    cout<<T->data; 
    InOrderTraverse(T->rchild);
}

//递归方式后序遍历二叉树

void PostOrderTraverse(BiTree T)
{
  if(T==NULL)
    return;
  PostOrderTraverse(T->lchild);
  PostOrderTraverse(T->rchild);
  cout<<T->data; 
}
void Level_Traverse(BiTree T){//层次遍历
	queue<BiTree> q;//创建队列q
	BiTree q1;
	q.push(T);
	while(!q.empty()){
	   q1=q.front();
	   cout<<q1->data;
	   q.pop();
	   if(q1->lchild)
		   q.push(q1->lchild);
	   if(q1->rchild)
		   q.push(q1->rchild);
	}

}

int main()
{
    
    BiTree T = NULL;
    cout << "请以前序遍历的方式输入二叉树:"; 
    CreateBiTree(T);// 建立二叉树

    cout << "递归前序遍历输出为:" << endl;
    PreOrderTraverse(T);
    cout << endl;

    cout << "递归中序遍历输出为:" << endl;
    InOrderTraverse(T);
    cout << endl;

    cout << "递归后序遍历输出为:" << endl;
    PostOrderTraverse(T);
    cout << endl;
	cout << "层次遍历输出为:" << endl;
    Level_Traverse(T);
	cout<<endl;
	system("pause");
    return 0;
}

 

这里,我重点说一下层次遍历的实现:

层次遍历,先将根元素入队,再利用循环(当队列不空时,访问该出队的元素,再进行出队)

该出队元素,若其左子树不为空,则将左子树入队;

若其右子树不为空,则将右子树入队。

注意:我在队列的选择时,选取的是STL容器中的queue队列,因为其提供了许多方便快捷的成员函数,操作起来更为方便,大大减少了代码量。

猜你喜欢

转载自blog.csdn.net/qq_40170007/article/details/88037358