二叉树的层次遍历
编写程序,要求实现(1)按先序遍历序列建立二叉树的二叉链表;(2)按层次遍历二叉树。
构成二叉链表的结点类代码如下:
class BtNode{
char data;
BtNode lchild,rchild;
}
按加入空树信息的先序遍历序列建立二叉树的二叉链表代码提供如下:
//先序遍历序列建立二叉链表
public static BtNode createBiTree() throws IOException{
char c=(char) System.in.read();
if(c==’#’){
return null;
}else{
BtNode bt=new BtNode();
bt.data=c;
bt.lchild=createBiTree();
bt.rchild=createBiTree();
return bt;
}
}
输入格式:
输入一棵二叉树的加入空树信息的先序遍历序列,以#字符表示空树。
输出格式:
输出二叉树的层次遍历的序列。
输入样例:
ab#c##d##
输出样例:
abdc
/*tree*/
#include<iostream>
#include<queue>
using namespace std;
typedef struct node{
char data;
node*lchild,*rchild;
}BiNode,*BiTree;
BiTree create(){
char ch;
BiTree T;
cin>>ch;
if(ch=='#'){
T=NULL;
}else{
T=new BiNode;
T->data=ch;
T->lchild=create();
T->rchild=create();
}
return T;
}
void visit(BiTree T){
cout<<T->data;
}
void bianli(BiTree T){
if(T==NULL)return;
bianli(T->lchild);
visit(T);
bianli(T->rchild);
}
void cxbl(BiTree T){
queue<BiTree>q;
q.push(T);
BiTree p;
while(!q.empty()){
cout<<q.front()->data;
p=q.front();
q.pop();
if(p->lchild!=NULL){q.push(p->lchild);
}
if(p->rchild!=NULL){q.push(p->rchild);
}
}
}
int main(){
BiTree Tree=create();
cxbl(Tree);
return 0;
}
建立与遍历二叉树
以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉树并输出结点数据。
输入格式:
字符串形式的先序序列(即结点的数据类型为单个字符)
输出格式:
中序遍历结果
输入样例:
在这里给出一组输入。例如:
ABC##DE#G##F###
输出样例:
在这里给出相应的输出。例如:
CBEGDFA
#include<cstdio>
#include<cstdlib>
using namespace std;
char ch;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
{
if(ch=='\n')
return;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InOrder(BiTree T)//中序遍历二叉树
{
if(T!=NULL){
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);
}
}
int main()
{
BiTree T;
CreateBiTree(T);
InOrder(T);
return 0;//124##5##3##
}