C++关于树的一些常用代码实现
2021/10/22 14:09:32
本文主要是介绍C++关于树的一些常用代码实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <stdio.h>
#include <iostream>
#include "stack.cpp"
#include "queue.cpp"
typedef struct Node{
int data;
struct Node*lchild;
struct Node*rchild;
}BiNode,*BiTree;
void visit(BiTree T)
{
printf("%d",T->data);
return ;
}
void preorder(BiTree T)
{
if(T!=NULL)
{
visit(T);
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BiTree T)
{
if(T!=NULL)
{
inorder(T->lchild);
visit(T);
inorder(T->rchild);
}
}
void postorder(BiTree T)
{
if(T!=NULL)
{
postorder(T->lchild);
postorder(T->rchild);
visit(T);
}
}
//非递归中序遍历:
void inorder2(BiTree T)
{
sqstack s;
initstack(s);BiTree p=T;
while(p||!stackempty(s))
{
if(p)
{
push(s,(int)p);//有一定问题,因为push函数参数写的int,而p应该是一个树的结点指针
p=p->lchild;
}
else
{
pop(s,(int)p);
visit(T);
p=p->rchild;
}
}
}
//非递归的先序遍历
void preorder2(BiTree T)
{
sqstack s;
initstack(s);BiTree p=T;
while(p||!stackempty(s))
{
if(p)
{
visit(p);
push(s,(int)p);
p=p->lchild;
}
else
{
pop(s,(int)p);
p->rchild;
}
}
}
//非递归后续遍历
void posorder(BiTree T)
{
sqstack s;
initstack(s);
BiTree p=T;
BiTree r=NULL;
while(p||!stackempty(s))
{
if(p)
{
push(s,(int)p);
p->lchild;
}
else
{
Gettop(s,(int)p);
if(p->lchild&&p->rchild!=r)
p=p->rchild;
else
{
pop(s,(int)p);
visit((BiTree)p->data);
r=p;
p=NULL;
}
}
}
}
//层次遍历
void leveorder(BiTree T)
{
sqQueue*Q;
initqueue(Q);
BiTree p;
enterqueue(Q,(int)T);
while(!empty(Q))
{
Dletequeue(Q,(int)p);
visit(p);
if(p->lchild!=NULL)
enterqueue(Q,(int)p->lchild);
if(p->rchild!=NULL)
enterqueue(Q,(int)p->rchild);
}
}
//线索二叉树
typedef struct ThreadNode{
int data;
struct ThreadNode*lchild;
struct ThreadNode*rchild;
int ltag,rtag;
}ThreadNode,*ThreaTree;
这篇关于C++关于树的一些常用代码实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享