二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
来源:互联网 发布:约会 知乎 编辑:程序博客网 时间:2024/05/17 22:35
二叉树的结点定义
typedef struct BiTNode {
TElemType data;
BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
二叉树的创建:根据字符数组创建字母ABC等代表结点,#代表空子树
也是用递归实现
bool CreateBiTree(BiTree &T,char *s,int &pos)//创建二叉树,s为字符数组pos为数组下标,第一次调用pos==0
{
if(*(s+pos)=='#')
{
T=NULL;
}
else if(*(s+pos)=='\0')
{
T=NULL;
return true;
}
else
{
T=new BiTNode;
if(T==NULL)
{
cout<<"error";
return false;
}
T->data=*(s+pos);
T->lchild=NULL;
T->rchild=NULL;
CreateBiTree(T->lchild,s,++pos);
CreateBiTree(T->rchild,s,++pos);
}
return true;
}
//递归先序遍历二叉树
先序很简单,无非是访问根节点,递归访问左结点,递归访问右结点
void PreOrderTraverse(BiTree T)
{
if(T!=NULL)
{
cout<<T->data;//cout打印出来就算是访问了,当然你可以写个访问函数
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
else return;
}
//递归中序遍历二叉树
中序的算法为:递归访问左子树-->访问根结点,-->递归访问右子树
void InOrderTraverse(BiTree T)
{
if(T!=NULL)
{
InOrderTraverse(T->lchild);
cout<<T->data;
InOrderTraverse(T->rchild);
}
else return;
}
//递归后序遍历二叉树
递归访问左子树-->递归访问右子树-->访问根结点
void PostOrderTraverse(BiTree T)//递归后序遍历二叉树
{
if(T!=NULL)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data;
}
else return;
}
从上面可以看出先序,中序,后序递归遍历二叉树,无非是访问根结点的顺序不同
//。。。访问根结点在前就是先序。。。
递归访问左子树
//。。。访问根结点在中间就是中序遍历。。。
递归访问右子树
//。。。访问根结点在最后就是后序遍历。。。
层序遍历二叉树
void LeverOrderTraverse(BiTree T)
{
if(T==NULL)return;
Queue q; //利用队列的先进先出特点,根结点先进,所以根结点先被访问,再进做孩子,有孩子
q.push(T);//压入根结点
BiTree p;//用一个对列保存结点
while (!q.IsEmpty()) {
q.pop(p);
cout<<p->data; //访问根节点
if (p->lchild!=NULL)
{
q.push(p->lchild);//做孩子入列
}
if (p->rchild!=NULL)
{
q.push(p->rchild);//右孩子入列
}
}
}
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- C++实现二叉树的递归遍历与非递归遍历(先序、中序、后序、层序)
- 二叉树的创建(先序创建的)及先序遍历 中序遍历 后序遍历的递归和非递归实现
- 二叉树T 的先序遍历、中序遍历、后序遍历(递归实现)
- 二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)
- 二叉树的创建与先、中、后序遍历递归实现
- 二叉树的递归创建,先序(中序、后序)递归遍历二叉树
- 二叉树的先序、中序、后序、层序递归及非递归遍历
- 二叉树的先序/中序/后序(递归、非递归)+层序遍历
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法
- 二叉树的先序、中序、后序的递归及非递归实现,以及层次遍历的实现:
- 树--递归实现先、中、后遍历,层序遍历和树的深度
- 二叉树的先序遍历、中序遍历、后序遍历、层次遍历的递归实现
- 二叉树的创建和先序,中序,后序,递归,非递归遍历
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- C语言非递归实现二叉树的先序、中序、后序、层序遍历
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 安全删除linux旧内核的方法
- 解决SourceInsight两个问题
- advanceDatagrid
- cocos2d sprite执行完动作之后调用回调自行销毁
- 日本人的技术书
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- C#创建SQL Server数据库浅析
- 【人生】人生感悟(不断更新……)
- Windows Server 2008 R2 的 IIS 7.5 特色功能介绍
- vmware-tools.pl运行时Guest operating system daemon: 失败问题的解决方法
- C#中的Dictionary简介
- javascript 定时器
- USACO Section 3.1 Stamps - 表示很Eggache!!!看清题目才是根本..
- Photoshop 看看