二叉树的存储结构(C++)
遍历:先序遍历,中序遍历,后序遍历
附上代码://二叉树的存储和遍历,创建二叉树,后序的直接加上函数和算法
#include<iostream>
usingnamespace std;
typedefstruct Node{
char data;
struct Node *lchild,*rchild;
}*Bitree;
//创建二叉树
voidCreatBtree(Bitree &T)
{
//先序次序输入二叉树节点的值
char ch;
cin>>ch;
if(ch=='#')
{
T = NULL ;//树的值为空,用于返回上一层,递归结束点。
}
else{
T=new Node;
T->data = ch ;
//递归
CreatBtree(T->lchild);
CreatBtree(T->rchild);
}
}
//遍历二叉树
voidTravel(Bitree T)
{
if(T)
{
cout<<T->data;
Travel(T->lchild);
Travel(T->rchild);
}
}
int main(void)
{
Bitree T;
CreatBtree(T);
/*字符的输入 ABC##DE#G##F###*/
Travel(T);
return 0;
}
#代表值为NULL,返回上一层,撸多了没用,看图说话
算法:复制二叉树,计算二叉树的深度,统计二叉树节点的个数
//复制二叉树;
void CopyTree(Bitree T , Bitree &T1)
{
if(T== NULL)
{
T1= NULL;
return;
}
else{
T1 =new Node;
T1->data = T->data;
//递归
CopyTree(T->lchild,T1->lchild);
CopyTree(T->rchild,T1->rchild);
}
}
//深度计算层数//5
intDepth(Bitree T){
intm,n;
if(T==NULL)
{
return0;
}
else{
m= Depth(T->lchild)+1;
n= Depth(T->rchild)+1;
if(m>=n)
{
return m;
}
else{
return n;
}
}
}
//统计二叉树节点的个数
intCountTree(Bitree T){
if(T == NULL)
{
return0;
}
else{
return CountTree(T->lchild)+CountTree(T->rchild)+1;
}
}
//对于递归的理解,二叉树本身递归情况的分类就是空树和一个单独的节点,每一个节点,递归就是子树,我们只需要找到空树与一个节点的关系就可以很正确的理解递归。
#include<iostream>
using namespace std;
typedef struct Node{
char data;
struct Node *lchild,*rchild;
}*Bitree;
//创建二叉树
void CreatBtree(Bitree &T)
{
//先序次序输入二叉树节点的值
char ch;
cin>>ch;
if(ch=='#')
{
T = NULL ;//树的值为空,用于返回上一层,递归结束点。
}
else{
T=new Node;
T->data = ch ;
//递归
CreatBtree(T->lchild);
CreatBtree(T->rchild);
}
}
//遍历二叉树
void Travel(Bitree T)
{
if(T)
{
cout<<T->data;
Travel(T->lchild);
Travel(T->rchild);
}
}
//复制二叉树;
void CopyTree(Bitree T , Bitree &T1)
{
if(T == NULL)
{
T1 = NULL;
return ;
}
else{
T1 =new Node;
T1->data = T->data;
//递归
CopyTree(T->lchild,T1->lchild);
CopyTree(T->rchild,T1->rchild);
}
}
//二叉树的深度;
int Depth(Bitree T){
int m,n;
if(T==NULL)
{
return 0;
}
else{
m = Depth(T->lchild)+1;
n = Depth(T->rchild)+1;
if(m>=n)
{
return m;
}
else{
return n;
}
}
}
//统计二叉树的节点个数
int CountTree(Bitree T){
if(T == NULL)
{
return 0;
}
else{
return CountTree(T->lchild)+CountTree(T->rchild)+1;
}
}
int main(void)
{
Bitree T,T1;
CreatBtree(T);
/*字符的输入 ABC##DE#G##F###*/
Travel(T);
cout<<endl;
CopyTree(T ,T1);
Travel(T1);
cout<<endl;
cout<<Depth(T);//5
cout<<endl;
cout<<CountTree(T);
return 0;
}