二叉樹經典題解
阿新 • • 發佈:2019-02-11
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
struct BiTNode{
char data;
struct BiTNode* lchild, * rchild;
};
BiTNode* T;
void CreateTree(BiTNode* &T){
char ch;
ch = getchar();
if(ch != '#'){
T = new BiTNode;
T->data = ch;
CreateTree(T ->lchild);
CreateTree(T->rchild);
}else{
T = NULL;
}
}
void preorder(BiTNode* T){
if(T){
cout << T->data;
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BiTNode* T){
if(T){
inorder(T->lchild);
cout << T ->data;
inorder(T->rchild);
}
}
void postorder(BiTNode* T){
if(T){
postorder(T->lchild);
postorder(T->rchild);
cout << T->data;
}
}
void cengci(BiTNode* T){
queue<BiTNode*> q;
if(T){
q.push(T);
while(!q.empty()){
T = q.front();
q.pop();
cout << T->data;
if(T->lchild){
q.push(T->lchild);
}
if(T->rchild){
q.push(T->rchild);
}
}
}
}
int main(){
CreateTree(T);
cout << "先序遍歷:";
preorder(T);
cout << endl << "中序遍歷:";
inorder(T);
cout << endl << "後序遍歷:";
postorder(T);
cout << endl << "層次遍歷:";
cengci(T);
return 0;
}
下面是另一種寫法;
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;
typedef struct Node{
struct Node* lchild;//左孩子
struct Node* rchild;//右孩子
char c;
}Node,*BiTree;
BiTree creatTree(){//建樹
char str;
BiTree T;
scanf("%c",&str);
if(str=='#')
{
T=NULL;
}
else{
T = new Node;
T->c = str;
T->lchild = creatTree();
T->rchild = creatTree();
}
return T;
}
//先序遍歷
void preOrder(BiTree T){
if(T){
printf("%c",T->c);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
//中序遍歷
void inOrder(BiTree T){
if(T){
inOrder(T->lchild);
printf("%c",T->c);
inOrder(T->rchild);
}
}
//後序
void postOrder(BiTree T){
if(T){
postOrder(T->lchild);
postOrder(T->rchild);
printf("%c",T->c);
}
}
//層次
void cengorder(BiTree T){
BiTree P;
queue <BiTree> Q;
if(T){
Q.push(T);
}
while(!Q.empty() ){
P=Q.front() ;
Q.pop() ;
printf("%c",P->c );
if(P->lchild !=NULL){
Q.push(P->lchild );
}
if(P->rchild !=NULL){
Q.push(P->rchild );
}
}
}
int main(){
BiTree T;
T = creatTree();
preOrder(T);
inOrder(T);
postOrder(T);
cengorder(T);
return 0;
}