#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
//typedef char ElemType;
#define MAXSIZE 60
typedef struct node
{
char data; //存放结点的值
struct node* lchild;//指向左孩子结点指针
struct node* rchild;//指向右孩子结点指针
}BTNode;
void InitBiTree(BTNode*& T)//初始化二叉树,用于构造一棵空的二叉树
{
T = NULL;
}
void CreateBiTree(BTNode*& T, char* str)//创建二叉树
{
//定义一个大小为MAXSIZE的存储二叉树结点的栈,p用来作为中间变量暂存结点再存放到栈中
BTNode* St[MAXSIZE], * p = NULL;
//top用来进行进栈、出栈之类的操作,tag用于判断是是栈中结点的左孩子还是右孩子
//tag==1时表明为这个结点为栈中结点的左孩子
//tag==2时表明这个结点作为栈中结点的右孩子结点
//j用于遍历字符串
int top = -1, tag=0, j = 0;
char ch;
T = NULL;//建立的二叉树初始时为空
ch = str[j];
while (ch != '\0')//str未扫描完时循环
{
switch (ch)
{
case'('://若为左括号的话则将top的值加一,将上一个已经开辟空间的p结点进行入栈操作,
{
//并将tag的值置为1,意为下一个是左孩子
top++;
St[top] = p;
tag = 1;
break;
}
case')'://如果是括号的话top的值减一,则相当于进行出栈操作