/**
* 实验题目:
* 实现二叉树各种基本运算的算法
* 实验内容:
设计程序,实现二叉树的基本运算,在此基础上,完成如下功能:
* 1、由二叉树创建对应的二叉链存储结构b,该二叉树的括号表示串为
* "A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"。
* 2、输出二叉树b
* 3、输出'H'结点的左、右孩子结点值
* 4、输出二叉树b的深度
* 5、输出二叉树b的宽度
* 6、输出二叉树b的结点个数
* 7、输出二叉树b的叶子结点个数
*/
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data; // 数据元素
struct node *lchild; // 指向左孩子结点
struct node *rchild; // 指向右孩子结点
}BTNode; // 声明二叉链结点类型
/*-------------由括号表示串str创建二叉链b-----------------*/
// char *str = "A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))";
void CreateBTNode(BTNode *&b, char *str)
{
BTNode *p = NULL;
BTNode *St[MaxSize];
int top = -1;
int k;
int j = 0;
char ch;
b = NULL;
ch = str[j];
// printf("start %s, ch = %c\n", __func__, ch);
while(ch != '\0')
{
switch(ch)
{
case '(':
top++;
St[top] = p;
k = 1;
break;
case ')':
top