结点声明
typedef struct node {
ElemType data;
struct node* lchild;
struct node* rchild;
}BTNode;
创建
void CreateBTree(BTNode*& b, char* str)
{
//*p用于新建结点
BTNode* st[MAXSIZE], * p;
//top用于计数与指向新结点,k用于判断是左结点还是右结点,j用于遍历字符串
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 = (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;
}
}
}
j++;
ch = str[j];
}
}
销毁
void DestroyBTree(BTNode*& b)
{
if (b != NULL)
{
DestroyBTree(b->lchild);
DestroyBTree(b->rchild);
free(b);
}
}
查找结点
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);
}
}
找孩子结点
BTNode* LchildNode(BTNode* p)
{
return p->lchild;
}
BTNode* RchildNode(BTNode* p)
{
return p->rchild;
}
求高度
int BTHeight(BTNode* b)
{
int lchildh, rchildh;
if (b == NULL)
return 0;
else {
lchildh = BTHeight(b->lchild);
rchildh = BTHeight(b->rchild);
return (lchildh > rchildh) ? (lchildh + 1) : (rchildh + 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 << ")";
}
}
}