目录
前言
例如:跟着其他的大神学习了二叉树的遍历,下面简单介绍一下二叉树遍历的知识。
(我是一个纯小白)
一、二叉树遍历是什么?
所谓遍历,就是将一个数据结构中的数据按照一定的顺序都过一遍。而二叉树的遍历,就是按照一定规律依次遍历二叉树中的根节点、左子树、右子树。
二、二叉树遍历的种类
若规定遍历先左后右,那么二叉树的遍历种类可分为前序遍历、中序遍历、后序遍历。前序遍历的遍历方式为访问根节点,访问左子树,访问右子树(顺序即为根左右)。中序遍历的遍历方式为访问左子树,访问根节点,访问右子树(顺序为左根右)。后序遍历的遍历方式为访问左子树,访问右子树,访问根节点(顺序为左右根)。根在哪就如何遍历,根在前为前序,在中为中序,在后为后序。
以下遍历的实现是基于递归算法。
1.前序遍历
代码如下(示例):
void Preordertraverse(Binode *T){//通过递归来实现遍历 if(T){//如果根节点不为空 cout<<T->data<<" ";//输出根节点的数据 Preordertraverse(T->Lchild);//以左子树为根节点递归 Preordertraverse(T->rchild);//以右子树为根节点递归 } }
2.中序遍历
代码如下(示例):
//2、中序遍历 void Inordertraverse(Binode *T) { if(T)//判断根节点是否为空 { Inordertraverse(T->Lchild);//以左子树为根节点递归 cout<<T->data<<" ";//输出根节点的数据 Inordertraverse(T->rchild);//以右子树为根节点递归 } }
3、后序遍历
代码如下(示例):
void Postordertraverse(Binode *T)
{
if(T)//判空
{
Inordertraverse(T->Lchild);//以左子树为根节点递归
Inordertraverse(T->rchild);//以右子树为根节点递归
cout<<T->data<<" ";//输出根节点的数据
}
}
遍历如下二叉树(可以说是最简单的二叉树了,嘿嘿)
完整调试代码如下:
#include <iostream>
#include<stdlib.h>
using namespace std;
//二叉链表的结构定义
typedef struct Binode{
char data;//定义数据存放点
struct Binode *Lchild,*rchild;//分别定义左子树和右子树
}Binode,*Bitree;//定义数据结构别名
//1.先序遍历
void Preordertraverse(Binode *T){
if(T){
cout<<T->data<<" ";
Preordertraverse(T->Lchild);
Preordertraverse(T->rchild);
}
}
//2、中序遍历
void Inordertraverse(Binode *T)
{
if(T)
{
Inordertraverse(T->Lchild);
cout<<T->data<<" ";
Inordertraverse(T->rchild);
}
}
//3.后序遍历
void Postordertraverse(Binode *T)
{
if(T)
{
Inordertraverse(T->Lchild);
Inordertraverse(T->rchild);
cout<<T->data<<" ";
}
}
int main()
{
Binode *T;
//二叉树的初始化
T=(Binode *)malloc(sizeof(Binode));//利用malloc函数为二叉树根节点分配空间
T->data='a';//二叉树根节点赋值
T->Lchild=(Binode *)malloc(sizeof(Binode));//利用malloc函数为二叉树左子树分配空间
T->Lchild->data='b';//二叉树左子树赋值
T->Lchild->Lchild=NULL;//左子树无孩子
T->Lchild->rchild=NULL;
T->rchild=(Binode *)malloc(sizeof(Binode));//利用malloc函数为二叉树右子树分配空间
T->rchild->data='c';//为二叉树右子树赋值
T->rchild->Lchild=NULL;//右子树无孩子
T->rchild->rchild=NULL;
//前序遍历
cout<<"前序遍历结果如下:"<<endl;
Preordertraverse(T);//调用前序遍历函数
cout<<endl;//换行
//中序遍历
cout<<"中序遍历结果如下:"<<endl;
Inordertraverse(T);//调用中序遍历函数
cout<<endl;
//后序遍历
cout<<"后序遍历结果如下:"<<endl;
Postordertraverse(T);//调用后序遍历函数
cout<<endl;
return 0;
}
总结
代码很简单吧,哈哈哈。适合初学者看,我也是小白,能力有限,写不出太复杂的代码。
二叉树其实重在理解,理解之后就好学多了。