//ABC##DE#G##F###
#include <iostream>
#include <cstring>
using namespace std;
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTnode;
char a[100];
int cur = -1;
//建树(先序)
void Create(BTnode *&T)
{
cur++;
if(cur >= strlen(a)) return;
if(a[cur] == '#')
{
T = NULL;
}
else
{
T = new BTnode;
T->data = a[cur];
Create(T->lchild);
Create(T->rchild);
}
}
//先序遍历
void Pre(BTnode *T)
{
if(T)
{
cout<<T->data<<" ";
Pre(T->lchild);
Pre(T->rchild);
}
}
//中序遍历
void Mid(BTnode *T)
{
if(T == NULL) return;
Mid(T->lchild);
cout<<T->data;
Mid(T->rchild);
}
//后序遍历
void Pos(BTnode *T)
{
if(T == NULL) return;
Pos(T->lchild);
Pos(T->rchild);
cout<<T->data<<" ";
}
//层次遍历(bfs)
void Level(BTnode *T)
{
if(T == NULL) return;
BTnode *a[100];
int front = -1, rear = 0;
a[0] = T;
while(front != rear)
{
front++;
cout<<a[front]->data;
if(a[front]->lchild) a[++rear] = a[front]->lchild;
if(a[front]->rchild) a[++rear] = a[front]->rchild;
}
}
int GetHeight(BTnode *T) //求树的高度(后序)当前高度等于左子树高度加右子树高度的最大值+1
{
if(T == NULL)
return 0;
return max(GetHeight(T->lchild), GetHeight(T->rchild)) + 1;
}
void Leaves(BTnode *T) //输出叶子结点(后序)
{
if(T == NULL) return;
if(!T->lchild && !T->rchild) cout<<T->data<<" ";
else
{
Leaves(T->lchild);
Leaves(T->rchild);
}
}
int LeavesNum(BTnode *T) //输出叶子结点个数(后序)
{
if(T == NULL) return 0;
if(!T->lchild && !T->rchild) return 1;
return LeavesNum(T->lchild) + LeavesNum(T->rchild);
}
void Copy(BTnode *T, BTnode *&t) //复制二叉树(先序)
{
if(T == NULL)
{
t = NULL;
}
else
{
t = new BTnode;
t->data = T->data;
Copy(T->lchild, t->lchild);
Copy(T->rchild, t->rchild);
}
}
int main()
{
BTnode *T, *t;
cin>>a;
Create(T);
//Mid(T);
Pre(T);
cout<<endl;
Copy(T, t);
Level(t);
cout<<endl;
//Leaves(T);
//cout<<LeavesNum(T)<<endl;
//cout<<GetHeight(T)<<endl;
return 0;
}
【二叉树】基本操作集
最新推荐文章于 2021-06-13 15:08:39 发布