二叉树的基本操作

基本代码如下:

#include <iostream>
using namespace std;
#include <string>
typedef char TElemType;
typedef struct BiTNode{
	TElemType data;//结点数据域 
	struct BiTNode *lchild,*rchild;//左右孩子指针 
}BiTNode,*BiTree;

//先序遍历创建树 
void CreateBiTree(BiTree &T){
	char ch;
	cin>>ch;
	if(ch=='#') T=NULL;//遇到空字符,建立空树 
	else{//递归创建二叉树 
		T=new BiTNode;//生成根节点 
		T->data=ch;//根结点数据域置为输入的ch 
		CreateBiTree(T->lchild);//递归创建左子树 
		CreateBiTree(T->rchild);//递归创建右子树 
	}
}
//复制二叉树(复制一颗和T完全相同的二叉树)
void Copy(BiTree T,BiTree &NewT){//NewT是指针,用来复制树 
	if(T==NULL){//如果是空树,递归结束 
		NewT=NULL;
		return;
	}
	else{
		NewT=new BiTNode;
		NewT->data=T->data;//复制根节点
		Copy(T->lchild,NewT->lchild);//递归复制左子树 
		Copy(T->rchild,NewT->rchild);//递归复制右子树 
	}
}
//计算二叉树深度
int Depth(BiTree T){
	if(T==NULL) return 0;//如果是空树,深度为0,递归结束 
	else{
		int m=Depth(T->lchild);//递归计算左子树的深度记为m 
		int n=Depth(T->rchild);//递归计算右子树的深度记为n
		if(m>n) return (m+1);
		else return (n+1); 
	}
}
//计算二叉树中结点总个数
int NodeCount(BiTree T){
	if(T==NULL) return 0;//如果是空树,则结点个数为0,递归结束 
	else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;//否则 结点个数=左子树的结点个数+右子树的结点个数+1(1是根结点) 
}
//计算二叉树叶子结点个数
int LeadCount(BiTree T){
	if(T==NULL) return 0;//如果是空树返回0
	if(T->lchild == NULL && T->rchild ==NULL) return 1;//如果是叶子结点返回1 
	else return LeadCount(T->lchild)+//左子树看成一个整体 
				LeadCount(T->rchild);//右子树看成一个整体 
}
//中序遍历的递归算法
void InOrderTraverse(BiTree T){
	if(T){//若二叉树非空 
		InOrderTraverse(T->lchild);//中序遍历左子树 
		cout<<T->data; 			   //访问根节点 
		InOrderTraverse(T->rchild);//中序遍历右子树 
	}
} 
int main(){
	BiTree T;
	cout<<"请依次输入结点的值:"<<endl; 
	CreateBiTree(T);
	cout<<"中序遍历此二叉树为:";
	InOrderTraverse(T);  cout<<endl;
	cout<<"结点个数为:"<<NodeCount(T)<<"个"<<endl;
	cout<<"深度为"<<Depth(T)<<"层"<<endl; 
	cout<<"叶子结点数"<<LeadCount(T)<<endl;
	return 0; 
}

实现: 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值