这是实现二叉树的基本运算算法:
#include <iostream>
#include<cstdlib>
using namespace std;
typedef char ElemType;
const int MaxSize=100;
//二叉树中结点类型BTNode的声明
typedef struct node{
ElemType data;
struct node* lchild;
struct node* rchild;
}BTNode;
//创建二叉树
void CreateBTree(BTNode *&b,ElemType *str){
BTNode *St[MaxSize],*p;
b=NULL;
int top=-1,k;
ElemType ch;
for(int i=0;(ch=str[i])!='\0';i++){
switch(ch){
case '(':St[++top]=p;k=1;break;
case ')':top--;break;
case ',':k=2;break;
default:
p=(BTNode*)malloc(sizeof(BTNode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(b==NULL)b=p;
else{
switch(k){
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
}
}
//销毁二叉树
void DestoryBTree(BTNode *&b){
if(b!=NULL){
DestoryBTree(b->lchild);
DestoryBTree(b->rchild);
free(b);
}
}
//输出二叉树
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<<")";
}
}
}
//查找结点
BTNode *FindNode(BTNode* b,ElemType 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);
}
}
//求二叉树的高度
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 Order(BTNode *b){
if(b!=NULL){
//先序遍历
cout<<b->data;
Order(b->lchild);
//中序遍历
//cout<<b->data;
Order(b->rchild);
//后序遍历
// cout<<b->data;
}
}
int main() {
ElemType str[]="A(B(D(,G)),C(E,F))";
BTNode *b;
CreateBTree(b,str);
// DispBTree(b);
// if(FindNode(b,'E')) cout<<"yes";
// cout<<BTHeight(b);
Order(b);
return 0;
有不对的地方,请多多指教。