二叉树建立
Posted 梦西空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树建立相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h>
using namespace std;
typedef char typelem;
typedef struct node
typelem data;
struct node *lchild,*rchild;
Bitree;
//创建一个二叉树,qx数组为二叉树的前序序列,zx数组为二叉树的中序序列
void treecreate(Bitree *(*p),typelem qx[],typelem zx[],int i1,int j1,int i2,int j2)
int m=i2;
*p=new Bitree; (*p)->data=qx[i1];
while(qx[i1]!=zx[m])
m++;
if(m==i2) (*p)->lchild=NULL;
else treecreate(&((*p)->lchild),qx,zx,i1+1,i1+m-i2,i2,m-1);
if(m==j2) (*p)->rchild=NULL;
else treecreate(&((*p)->rchild),qx,zx,i1+m-i2+1,j1,m+1,j2);
void findtree(Bitree *p)
if(p!=NULL)
findtree(p->lchild);
findtree(p->rchild);
cout<<p->data<<' ';
//统计二叉树的叶子结点
int countleaf(Bitree *p)
if(!p)
return 0;
if(p->lchild==NULL&&p->rchild==NULL)
return 1;
return countleaf(p->lchild)+countleaf(p->rchild);
int f(Bitree *p)
if(p==NULL)
return 0;
else
int a=f(p->lchild);
int b=f(p->rchild);
return max(a,b)+1;
int jiedian(Bitree *p)
if(p==NULL)
return 0;
else
return jiedian(p->lchild)+jiedian(p->rchild)+1;
//计算二叉树的深度
int depthtree(Bitree *p)
if(p==NULL)
return 0;
if(p->lchild==NULL&&p->rchild==NULL)
return 1;
int a=depthtree(p->lchild),b=depthtree(p->rchild);
if(a>b)
return a+1;
return b+1;
int main()
typelem inputq[]='A','B','C','D','E','F','G','H',
inputz[]='B','D','C','E','A','F','H','G';
Bitree *T;
treecreate(&T,inputq,inputz,0,7,0,7);
findtree(T);
cout<<'\\n'<<"叶子结点数:"<<countleaf(T)<<'\\n'<<"深度:"<<depthtree(T)<<endl;
以上是关于二叉树建立的主要内容,如果未能解决你的问题,请参考以下文章