二叉树是一种非常重要的数据存储结构,是一种特殊的、常用的树型数据结构,则其基本操作也就非常重要。因为二叉树本身就是一个递归型数据存储结构,所以其操作基本上都可以用递归的形式实现。
【二叉树的创建】
要严格地进行输入,要把所有结点的左右孩子都进行输入,空结点用#代替(比如: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);
}
可见以上函数的实现都是依靠递归实现的,递归方法较为简洁,加上二叉树本身的特性,实现起来较为简单。不过还是有缺点的,执行较慢,消耗内存较大。有不对的地方还请多多指教。