/*
先序创建,空为999
1 2 4 999 999 5 999 999 3 6 999 999 999
*/
#include<bits/stdc++.h>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
typedef int ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void InitTree(BiTree &root){
root=(BiTree)malloc(sizeof(BiTNode));
root->lchild=NULL;
root->rchild=NULL;
}
BiTree CreatTree(BiTree t){//先序创建二叉树
ElemType x;
cin>>x;
if(x==999) return NULL;
else{
t=(BiTree)malloc(sizeof(BiTNode));
t->data=x;
t->lchild=CreatTree(t->lchild);
t->rchild=CreatTree(t->rchild);
}
return t;
}
void visit(BiTree t){
printf("%d",t->data);
}
void PreOrder(BiTree T){//先序遍历
if(T!=NULL){
visit(T); //访问根结点
PreOrder(T->lchild); //递归遍历左子树
PreOrder(T->rchild); //递归遍历右子树
}
}
void InOrder(BiTree T){//中序遍历
if(T!=NULL){
InOrder(T->lchild); //递归遍历左子树
visit(T); //访问根结点
InOrder(T->rchild); //递归遍历右子树
}
}
void PostOrder(BiTree T){//后序遍历
if(T!=NULL){
PostOrder(T->lchild); //递归遍历左子树
PostOrder(T->rchild); //递归遍历右子树
visit(T); //访问根结点
}
}
void LevelOrder(BiTree t){
BiTNode *h;
queue<BiTree>q;
q.push(t);
while(!q.empty()){
h=q.front();
q.pop();
printf("%d",h->data);
if(h->lchild!=NULL){
q.push(h->lchild);
}
if(h->rchild!=NULL){
q.push(h->rchild);
}
}
}
int treeDepth(BiTree T){
if(T==NULL) return 0;
else {
int l=treeDepth(T->lchild);
int r=treeDepth(T->rchild);
return l>r?l+1:r+1;
}
}
int main(){
BiTree t;
InitTree(t);
t=CreatTree(t);
cout<<"先序遍历:"; PreOrder(t);
cout<<endl<<"中序遍历:"; InOrder(t);
cout<<endl<<"后序遍历:"; PostOrder(t);
cout<<endl<<"层序遍历:"; LevelOrder(t);
cout<<endl<<"树的深度是"<<treeDepth(t);
return 0;
}
树的四种遍历及求深度
于 2020-08-16 19:44:28 首次发布