数据结构与算法:二叉树的实现和遍历方法(递归与非递归)
二叉树是数据结构中非常重要的一种,在它的基本操作方法中,遍历是最基本的也是必须要掌握的。本文将给出二叉树的C++语言实现和遍历的方法。
二叉树的遍历分为递归和非递归,递归方法包括先序遍历,中序遍历,后序遍历。非递归方法包括先序遍历,中序遍历,后序遍历,层序遍历。
下面给出实现代码:
#include <stack>
#include <cstdlib>
#include <stdio.h>
#include <deque>
using namespace std;
typedef struct TreeNode* BinTree;
struct TreeNode //定义
{
int data; //数据类型以int型为例
BinTree left;
BinTree right;
};
BinTree CreatTreeNode(int info)
{
BinTree thisTreeNode = new TreeNode;
thisTreeNode->data = info;
thisTreeNode->left = NULL;
thisTreeNode->right = NULL;
return thisTreeNode;
}
//递归实现
void PreOrderTraversal(BinTree BT) //先序遍历
{
if(BT)
{
printf("%d",BT->data);
PreOrderTraversal(BT->left);
PreOrderTraversal(BT->right);
}
}
void InOrderTraversal(BinTree BT) //中序遍历
{
if(BT)
{
InOrderTraversal(BT->left);
printf("%d",BT->data);
InOrderTraversal(BT->right);
}
}
void PostOrderTraversal(BinTree BT) //后序遍历
{
if(BT)
{
PostOrderTraversal(BT->left);
PostOrderTraversal(BT->right);
printf("%d",BT->data);
}
}
//非递归实现
void _PreOrderTraversal(BinTree BT) //先序遍历
{
stack<BinTree> s;
BinTree T = BT;
while(T||!s.empty()){
while(T){
printf("%d", T->data);
s.push(T);
T = T->left;
}
if(!s.empty()){
T = s.top();
T = T->right;
s.pop();
}
}
}
void _InOrderTraversal(BinTree BT) //中序遍历
{
stack<BinTree> s;
BinTree T = BT;
while(T||!s.empty()){
while(T){
s.push(T);
T = T->left;
}
if(!s.empty()){
T = s.top();
printf("%d", T->data); s.pop();
T = T->right;
}
}
}
void _PostOrderTraversal(BinTree BT) //后序遍历
{
stack<BinTree> s;
BinTree T = BT, P = NULL;
while(T||!s.empty()){
while(T){
s.push(T);
T = T->left;
}
if(!s.empty()){
T = s.top(); s.pop();
if(!T->right || P == T->right) //如果右子树为空,或者右子树已经访问过,则访问此几点
{printf("%d", T->data); P = T; T = NULL;}
else //否则重新放回堆栈
{s.push(T);T = T->right;}
}
}
}
void LevelOrderTraversal(BinTree BT) //层序遍历
{
if(!BT) return; //特殊情况
deque<BinTree> d;
BinTree T = BT;
d.push_back(BT);
while(!d.empty()){
T = d.front(); d.pop_front();
printf("%d", T->data);
if(T->left) d.push_back(T->left);
if(T->right) d.push_back(T->right);
}
}
二叉树的遍历算法需要牢记,在考试和面试中通常会作为基本功来考察。