#include <iostream>
using namespace std;
#define maxSize 100
typedef struct node {
char data;
struct node* lchild;//左孩子指针
struct node* rchild;//右孩子指针
}BTNode;
//创建二叉树
void CreateBTree(BTNode*& b, char* str) {
BTNode* sT[maxSize], * p = NULL;
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 = str[j];
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);
}
}
//查找值为x的结点
BTNode* FindNode(BTNode* b, char c) {
BTNode* p;
if (b==NULL)
{
return NULL;
}
else if (b->data == c) {
return b;
}
else
{
p = FindNode(b->lchild, c);
if (p != NULL)
{
return p;
}
else {
return FindNode(b->rchild, c);
}
}
}
//返回p结点的左孩子结点指针
BTNode* LchildNode(BTNode* p) {
return p->lchild;
}
//返回p结点的右孩子结点指针
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 << " ) ";
}
}
}
int main() {
BTNode* b = NULL;
char str[100] = { "A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))" };
CreateBTree(b, str);
DispBTree(b);
}
c二叉树
于 2023-05-19 20:26:42 首次发布