二叉树的三种递归遍历过目不忘

遍历一棵二叉树

在这里插入图片描述
遍历他!!!遍历他!!!
前序遍历序列:A B D G C E F
中序遍历序列:D G B A E C F
后序遍历序列:G D B E F C A
下面详细的解释三种递归遍历。

前序递归遍历

若二叉树为空,则空操作返回;
否则:①访问根结点;
②前序遍历根结点的左子树;
③前序遍历根结点的右子树。

void Pre(BiTree T)//递归方式前序遍历二叉树
{
    if (T == NULL)
        return;
    show(T->data);// 根 
    Pre(T->lchild);//左 
    Pre(T->rchild);//右 
}

中序递归遍历

若二叉树为空,则空操作返回;
否则:①中序遍历根结点的左子树;
②访问根结点;
③中序遍历根结点的右子树。

void InOrder(BiTree T)//递归方式中序遍历二叉树
{
	if(T==NULL)
	return;
	InOrder(T->lchild);//左 
	show(T->data);//根 
	InOrder(T->rchild);//右 
}

后序递归遍历

若二叉树为空,则空操作返回;
否则:①后序遍历根结点的左子树;
②后序遍历根结点的右子树。
③访问根结点;

void Post(BiTree T)//递归方式后序遍历二叉树
{
	if(T==NULL)
	return;
	Post(T->lchild);//左 
	Post(T->rchild);//右 
	show(T->data);//根 
}

完整代码

只要记住每种遍历的顺序,按顺序写递归,易懂易记,下附完整代码。

#include<bits/stdc++.h>
using namespace std;

typedef  struct BiTNode//二叉树的存储结构
{
    char data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

void Create(BiTree *T)
{
    char ch;
    cin >> ch;
    if (ch == '#')
    {
    	*T = NULL;
    	return ;
	}
    else
    {
        *T = new BiTNode;
        (*T)->data = ch;			//节点赋值 
        Create(&(*T)->lchild);//构造左子树
        Create(&(*T)->rchild);//构造右子树    
    }
}
void show(char ch)
{
       cout<<ch<<" ";
}
void Pre(BiTree T)//递归方式前序遍历二叉树
{
    if (T == NULL)
        return;
    show(T->data);// 根 
    Pre(T->lchild);//左 
    Pre(T->rchild);//右 
}

void InOrder(BiTree T)//递归方式中序遍历二叉树
{
	if(T==NULL)
	return;
	InOrder(T->lchild);//左 
	show(T->data);//根 
	InOrder(T->rchild);//右 
}

void Post(BiTree T)//递归方式后序遍历二叉树
{
	if(T==NULL)
	return;
	Post(T->lchild);//左 
	Post(T->rchild);//右 
	show(T->data);//根 
}


int main()
{
    BiTree T = NULL;
    cout<<"请以前序遍历的方式输入二叉树:"<<endl;
    Create(&T);
    cout<<"递归前序遍历输出为:"<<endl;
    Pre(T);
    cout<<endl;
    cout<<"递归中序遍历输出为:" <<endl;
    InOrder(T);
    cout<<endl;
    cout<<"递归后序遍历输出为:" <<endl;
    Post(T);
    cout<<endl;
    return 0;
}
发布了28 篇原创文章 · 获赞 40 · 访问量 3471

猜你喜欢

转载自blog.csdn.net/weixin_43912621/article/details/90500167
今日推荐