二叉树的基本操作

二叉树的基本操作包括 构建二叉树,中序,先序,后序遍历二叉树,查找二叉树结点,叶子个数,查找二叉树的深度

基本代码如下

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define Error 0
#define Overflow -1
#define OK 1
#define Max(a,b) (a>b?)a:b
typedef char TElemtype;  //树中元素初定为字符型
typedef int status;

typedef struct BiNode{
	TElemtype date;
	BiNode* lchild, * rchild;
}BiNode,*BiTree;

status visit(TElemtype e) {
	printf("%c", e);
	return OK;
}//输出树中数据,还可以改变为其他对树的操作
status creatBiTree(BiTree& T) {
	char ch;
	scanf_s(" %c", &ch);
	if (ch == '#')
		T = NULL;
	else {
		if (!(T = (BiNode*)malloc(sizeof(BiNode))))
			return Error;
		T->date = ch;
		creatBiTree(T->lchild);
		creatBiTree(T->rchild);
	}
	return OK;
}//采用先序方法输入二叉树的成员数据

status preOrder(BiTree T) {
	if (!T)
		return Error;
	visit(T->date);
	preOrder(T->lchild);
	preOrder(T->rchild);
	return OK;
}//先序方法遍历二叉树

status InOrder(BiTree T) {
	if (!T)
		return Error;
	InOrder(T->lchild);
	visit(T->date);
	InOrder(T->rchild);
	return OK;
}//中序方法遍历二叉树

status PostOrder(BiTree T) {
	if (!T)
		return Error;
	PostOrder(T->lchild);
	PostOrder(T->rchild);
	visit(T->date);
	return OK;
}//后序方法遍历二叉树

int Nodes(BiTree T) {
	if (!T)
		return 0;
	//if (!T->lchild && !T->rchild)
		//return 1;
	return 1 + Nodes(T->lchild) + Nodes(T->rchild);
}//计算二叉树结点的个数

int Leaves(BiTree T) {
	if (!T)
		return 0;
	if (!T->lchild && !T->rchild)
		return 1;
	return  Leaves(T->lchild) + Leaves(T->rchild);
}//叶子个数

int high(BiTree T) {
	if (!T)
		return 0;
	else {
		return (high(T->lchild) > high(T->rchild) ? high(T->lchild) : high(T->rchild)) + 1;
	}
}二叉树深度

int main() {
	BiTree T;
	creatBiTree(T);
	preOrder(T);
	printf("\n");
	InOrder(T);
	printf("\n");
	PostOrder(T);
	printf("\n");
	printf("树的叶子数为%d", Leaves(T));
	printf("\n");
	printf("树的结点数为%d", Nodes(T));
	printf("\n");
	printf("树的深度为%d", high(T));
	printf("\n");
	return 0;
}

输入ABC##DE#G##F###

输出如下

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值