二叉树的创建及相关操作

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

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

猜你喜欢

转载自blog.csdn.net/qq_41809589/article/details/86356019