二叉树的创建及相关操作

二叉树是一种非常重要的数据存储结构,是一种特殊的、常用的树型数据结构,则其基本操作也就非常重要。因为二叉树本身就是一个递归型数据存储结构,所以其操作基本上都可以用递归的形式实现。
【二叉树的创建】
要严格地进行输入,要把所有结点的左右孩子都进行输入,空结点用#代替(比如:ABC##DE#G##F###)。

typedef struct BiTNode {
	char date;
	struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void create(BiTree &T)
{
	char temp;
	cin >> temp;
	if (temp == '#')T = NULL;
	else
	{
		if (!(T = (BiTNode*)malloc(sizeof(BiTNode))))
		{
			cout << "内存已炸" << endl;
			return;
		}
		T->date = temp;
		create(T->lchild);
		create(T->rchild);
	}
}

【二叉树的先序输出遍历】

void pretravl(BiTree T)//先序
{
	if (T != NULL)
	{
		cout << T->date;
		pretravl(T->lchild);
		pretravl(T->rchild);
	}
}

【二叉树的中序输出遍历】

void medtravl(BiTree T)//中序
{
	if (T != NULL)
	{
		medtravl(T->lchild);
		cout << T->date;
		medtravl(T->rchild);
	}
}

【二叉树的后序输出遍历】

void behtravl(BiTree T)//后序
{
	if (T != NULL)
	{
		behtravl(T->lchild);
		behtravl(T->rchild);
		cout << T->date;
	}
}

【二叉树求深度】

int GetHeight(BiTree BT)
{
	int len1, len2;
	if (BT == NULL) return 0;
	len1 = GetHeight(BT->lchild);
	len2 = GetHeight(BT->rchild);
	if (len1 > len2) return len1 + 1;
	else return len2 + 1;
}

【二叉树求叶子数】

int TreeLeafSize(BiTNode* root)
{
	if (root == NULL)
		return 0;
	if (root->lchild == NULL && root->rchild == NULL)
		return 1;
	return TreeLeafSize(root->lchild) + TreeLeafSize(root->rchild);
}

int Countnode (BiTree T)
{
	if ( T )
		1+Countnode( T->lchild)+ Countnode( T->rchild);
	else
		return 0
}

可见以上函数的实现都是依靠递归实现的,递归方法较为简洁,加上二叉树本身的特性,实现起来较为简单。不过还是有缺点的,执行较慢,消耗内存较大。有不对的地方还请多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值