#include <iostream>
using namespace std;
struct btNode
{
char data;
btNode* btRight;
btNode *btLeft;
};
void preOrderRecurrence(btNode *bt)
{
//前序根、左、右(递归)
if (bt != nullptr)
{
bt->data;
preOrderRecurrence(bt->btLeft);
preOrderRecurrence(bt->btRight);
}
}
void ineOrderRecurrence(btNode *bt)
{
//中序左、根、右(递归)
if (bt != nullptr)
{
ineOrderRecurrence(bt->btLeft);
bt->data;
ineOrderRecurrence(bt->btRight);
}
}
void postOrderRecurrence(btNode *bt)
{
//后序左、右、根(递归)
if (bt != nullptr)
{
postOrderRecurrence(bt->btLeft);
postOrderRecurrence(bt->btRight);
bt->data;
}
}
//非递归前序遍历伪代码
//栈s初始化
//循环直到bt为空且栈为空
//输出data
//将bt保存进栈
//继续遍历左子树
//如果s不为空
//将栈顶元素弹出至bt
//遍历右子树
void preOrder(btNode *bt)
{
btNode *s[10];
int top = -1;//采用顺序栈,假定不发生上溢
//前序根、左、右(递归)
if (bt != nullptr||top!=-1)
{
while (bt == nullptr)
{
while (bt != nullptr)
{
//寻找叶节点
//进栈
s[++top] = bt;
bt->data;
//寻找左子树
bt->btLeft;
}
if (top != -1)
{
bt = s[top--];//出栈操作
bt = bt->btRight;//右子树
}
}
}
}
//中序遍历
void ineOrder(btNode *bt)
{
//设立栈
btNode *s[10];
int top = -1;
while (bt != nullptr || top != -1)
{
while (bt != nullptr)
{
//寻找叶子节点
bt=bt->btLeft;
s[++top] = bt;
}
if (top!=-1)
{
bt = s[top--];//出栈操作
bt->data;
bt = bt->btRight;//右子树
}
}
}
//后序遍历
void postOrder()
{
//提取左节点
//提取右节点并且进行
}
int main()
{
std::cout << "Hello World!\n";
}
二叉树的遍历
最新推荐文章于 2024-07-08 21:10:38 发布