二叉树建立

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;



以上是关于二叉树建立的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的建立与遍历 两天之内就要,急用!!!!

二叉树的建立及基本操作

非递归建立二叉树

算法——建立线索二叉树

关于数据结构中递归建立二叉树时出现了问题

二叉树的建立及线索二叉树的实现