二叉树的基本运算算法实现:
1.创建二叉树:根据二叉树的括号表示法的字符串生成二叉链存储结构
2.销毁二叉树:释放所有结点分配的空间
3.查找结点
4.查找孩子结点
5.求二叉树高度
6.输出二叉树:用括号表示法
创建二叉树
typedef struct node
{
int data;
struct node * lchild;
struct node * rchild;
struct node * parent;
}BTNode;
void CreateBTree(BTNode * &b, char * str)
{
BTNode * St[MaxSize], *p; //以st数组作为顺序栈
int top = -1, k,j=0;
char ch;
b = null;
ch = str[j];
while(ch!='\0')
{
switch(ch)
{
case '(': top++; St[top]=p; k=1; break;
case ')': top--; break;
case ',': k=2; break;
default: p = new BTNode;
p->data = ch;
p->lchild=p->rchild=null;
if(b=null)
{
b=p;
}
else
{
switch(k)
{
case 1: St[top]->lchild = p;
case 2: St[top]->rchild = p;
}
}
}
j++; //继续扫描
ch=str[j];
}
}
销毁二叉树:
void DestroyBTree(BTNode * & p)
{
if(p!=null) //利用递归的思想
{
DestoryBTree(p->lchild);
DestroyBTree(p->rchild);
free(p)
}
}
查找结点:
BTNode * FindNode(BTNode * b, char x)
{
BTNode *p;
if(b=null)
return null;
else if(b->data == x)
{
return b
}
else
{
p = FindNode(b->lchild,x);
if(p != null)
return p;
else
return FindNode(b->rchild, x); //这一句没太懂
}
}
查找孩子结点
BTNode * LchildNode(BTNode * p)
{
return p->lchild;
}
BTNode * RchildNode(BTNode * p)
{
return p->rchild;
}
求高度
int BTHeight(BTNode * b)
{
int lchild, rchild;
if(b==null) return 0;
else
{
lchild = BTHeight(b->lchild);
rchild = BTHeight(b->rchild);
return ( lchild > rchild ) ? ( lchild + 1) : ( rchild + 1 );
}
}
输出二叉树
void DispBTree(BTNode * b)
{
if(b != null)
{
cout << b->data;
if(b->lchild != null || b->rchild != null)
{
cout<<"(";
DispBTree(b->lchild);
if(b->rchild != null) cout<<",";
DispBTree(b->rchild);
cout<<")";
}
}
}