本篇文章以及代码参考其他博主的内容增加自己的注释完成,仅供学习交流
#include<cstdio>
#include<iostream>
#include<queue> //引入stl中的队列
using namespace std;
typedef struct node{
char data; //二叉树节点的数据域用字母表示
node* lchild; //C++语言中结构体定义时无需给出struct关键字
node* rchild;
}node,*Bi;
typedef struct{
int lel; //指向当前处理的元素在层次序列中的位置
int inlow,inhigh; //中序序列的上下界
Bi parent; //层次序列中当前结点的双亲结点指针
int lr; //判断左右子树,1为左子树,2为右子树
}Sq;
//先序遍历二叉树
void preorder(Bi p)
{
if(p)
{
printf("%c ",p->data);
preorder(p->lchild);
preorder(p->rchild);
}
}
//依据二叉树的层次序列和中序序列以及给出序列节点数n,建立二叉树的先序序列
void Creat(Bi &bt,char lev[],char in[],int n)
{
Sq q;
queue <Sq> Q;
if(n<1)
bt=NULL; //二叉树为空
else
{
int i,s;
i=s=0; //s指向层次序列中当前处理的元素,i用来寻找当前处理的元素在中序序列中的位置
bt=new node;
bt->data=lev[0];
bt->lchild=bt->rchild=NULL;
while(in[i]!=lev[0])
i++;
if(i==0 && i==n-1) return ; //只有一个根节点
if(i==0) //没有左子树
{
bt-&

这篇博客介绍了如何根据给定的中序和层序序列构建一棵二叉树,并确保该树的先序遍历序列符合特定条件。内容包括学习过程、代码实现和注释,旨在促进学习交流。
最低0.47元/天 解锁文章
2056

被折叠的 条评论
为什么被折叠?



