二叉树的层次遍历
编写程序,要求实现
(1)按先序遍历序列建立二叉树的二叉链表;(2)按层次遍历二叉树。
C++: 构成二叉链表的结点类代码如下: typedef struct BiNode {
char data; //结点数据域
struct BiNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree;按加入空树信息的先序遍历序列建立二叉树的二叉链表代码提供如下: //先序遍历序列建立二叉链表 void
CreateBiTree(BiTree &T) {
char ch;
cin >> ch;
if(ch==’#’) T=NULL; //递归结束,建空树
else{
T=new BiTNode;
T->data=ch; //生成根结点
CreateBiTree(T->lchild); //递归创建左子树
CreateBiTree(T->rchild); //递归创建右子树
} //else }
Java: 构成二叉链表的结点类代码如下: 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
#include<iostream>
using namespace std;
typedef struct BiNode
{
char data; //结点数据域
struct BiNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
{
char ch;
cin >> ch;
if(ch=='#') T=NULL; //递归结束,建空树
else{
T=new BiTNode;
T->data=ch; //生成根结点
CreateBiTree(T->lchild); //递归创建左子树
CreateBiTree(T->rchild); //递归创建右子树
} //else
}
int r=0;
//层次遍历
void Inorder(BiTree T){
if(T){
if(r==0){
cout<<T->data;}
BiTree p;
p=new BiTNode;
p=T->lchild;
if(p){
cout<<p->data;
}
p=T->rchild;
if(p){
cout<<p->data;
}
r++;
Inorder(T->lchild);
Inorder(T->rchild);
}
}
int main(){
BiTree tree;
CreateBiTree(tree);
Inorder(tree);
return 0;
}