C++二叉树的相关操作

#include<iostream>
#define maxSize 20
using namespace std;
typedef char TElemType;

//二叉树的顺序存储表示
typedef struct {
	TElemType data[maxSize];
	int n;
}SqBTree;

//二叉树的二叉链表表示
typedef struct node {
	TElemType data;
	struct node*lchild, *rchild;
}BitNode,BinTree;


//二叉树的遍历算法(中序遍历)
void InOrderRecur(BitNode*BT)
{
	if (BT != NULL)
	{
		InOrderRecur(BT->lchild);
		cout << BT->data << " ";
		InOrderRecur(BT->rchild);
	}
}

//二叉树的遍历算法(前序遍历)
void PreOrderRecur(BitNode*BT)
{
	if(BT != NULL) {
		cout << BT->data << " ";
		PreOrderRecur(BT->lchild);
		PreOrderRecur(BT->rchild);
	}
}

//二叉树的遍历算法(后序遍历)
void PostOrderRecur(BitNode*BT)
{
	if (BT != NULL)
	{
		PostOrderRecur(BT->rchild);
		PostOrderRecur(BT->rchild);
		cout << BT->data << " ";
	}
}

//前向建造二叉树
void CreateBinTreePre(BitNode*&T, TElemType pre[], int&n)
{
	TElemType ch = pre[n++];
	if (ch == ';')return;
	if (ch != '#')
	{
		T = new BitNode;
		T->data = ch;
		CreateBinTreePre(T->lchild, pre, n);
		CreateBinTreePre(T->rchild, pre, n);
	}
	else T=NULL;
}
//输出二叉树广义表格式
void PrintBinTree(BitNode*root)
{
	if (root != NULL)
	{
		cout << root->data;
		if (root->lchild != NULL || root->rchild != NULL)
		{
			cout << '(';
			PrintBinTree(root->lchild);
			cout << ',';
			PrintBinTree(root->rchild);
			cout << ')';
		}
	}
}
//删除二叉树
void ClearBinTree(BitNode*root)
{
	if (root != NULL)
	{
		ClearBinTree(root->lchild);
		ClearBinTree(root->rchild);
		delete root;
		root = NULL;
	}
}
//计算二叉树高度
int Height(BitNode*BT)
{
	if (BT == NULL)return 0;
	else {
		int i = Height(BT->lchild);
		int j = Height(BT->rchild);
		return i >= j ? i + 1 : j + 1;
	}
}
BitNode*GetParent(BitNode*BT, BitNode*p)
{
	if (BT == NULL)return NULL;
	if (BT->lchild == p || BT->rchild == p)return BT;
	BitNode*s = GetParent(BT->lchild, p);
	if (s!=NULL)return s;
	else return s = GetParent(BT->rchild, p);

}

int main()
{
	char ch[] = "ABC##D#E###;";
	BitNode*root;
	int n = 0;
	CreateBinTreePre(root, ch, n);
	PreOrderRecur(root);
	PrintBinTree(root);
	cout << Height(root);
	system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值