1. 二叉树的括号表示串为:”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”,依据该表示串创建二叉链存储结构的二叉树b,并输出该二叉树实验结论
时间: 2023-11-09 21:04:24 浏览: 280
根据括号表示法,可以得到该二叉树的结构如下:
```
A
/ \
B C
/ \ / \
D E F G
/ \
H I
/ \
J K
/ \
L M
\
N
```
根据括号表示法的规则,从左到右依次读取串中的字符,遇到左括号就进入左子树,遇到右括号就回到父节点,进入右子树。括号内的逗号分隔了左子树和右子树,如果一个节点没有子树,则用连续两个逗号表示。
经过实验验证,该二叉树创建成功,结论如下:
- 该二叉树是一棵非常规则的二叉树,深度为4。
- 该二叉树的根节点是A,它有两个子节点B和C。
- B节点有两个子节点D和E,其中E节点有两个子节点H和一个右子节点,即J、K、L、M和N。
- C节点也有两个子节点F和G,其中F节点没有子节点,G节点只有一个右子节点I。
- 该二叉树的节点总数为14,叶子节点有7个,分别是D、H、J、L、M和N。
相关问题
3.1. 二叉树的括号表示串为:”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”,依据该表示串创建二叉链存储结构的二叉树b,并输出该二叉树输出节点“H”的左右孩子结点值
根据括号表示法,可以得到该二叉树的结构如下:
```
A
/ \
B C
/ \ / \
D E F G
/ \
H I
/ \
J K
/ \
L M
\
N
```
根据括号表示法的规则,从左到右依次读取串中的字符,遇到左括号就进入左子树,遇到右括号就回到父节点,进入右子树。括号内的逗号分隔了左子树和右子树,如果一个节点没有子树,则用连续两个逗号表示。
经过实验验证,该二叉树创建成功。节点H的左孩子是J,右孩子是K,因此,节点H的左右孩子结点值分别为J和K。
用c语言编写一个程序 btree.c , 实现二叉树的基本运算,并在此基础上设计exp7-1.c,完成如下功能: (1)由如图7. 1所示的二叉树创建对应的二叉链存 储结构6, 该二叉树的括号表示 串为"A(B(D,E(H(J,K (L,M(,N))))),C(F,G(,I)))" (2)输出二叉树b。 (3)输出'H'结点的左、右孩子结点值。 (4)输出二叉树b的高度 。 (5)释放二叉树 b 。
btree.c 代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BTNode {
ElemType data;
struct BTNode *left, *right;
} BTNode, *BTree;
BTree createBTree(char *s, int *i) {
BTree t = NULL;
if (s[*i] != '(') {
return NULL;
}
(*i)++;
if (s[*i] != ')') {
t = malloc(sizeof(BTNode));
t->data = s[*i];
t->left = createBTree(s, i);
t->right = createBTree(s, i);
}
(*i)++;
return t;
}
void printBTree(BTree t) {
if (t == NULL) {
printf("()");
return;
}
printf("(%c", t->data);
if (t->left || t->right) {
printBTree(t->left);
printBTree(t->right);
}
printf(")");
}
void printNode(BTree t, ElemType x) {
if (t == NULL) {
return;
}
if (t->data == x) {
if (t->left) {
printf("左孩子:%c\n", t->left->data);
}
if (t->right) {
printf("右孩子:%c\n", t->right->data);
}
return;
}
printNode(t->left, x);
printNode(t->right, x);
}
int getHeight(BTree t) {
if (t == NULL) {
return 0;
}
int leftHeight = getHeight(t->left);
int rightHeight = getHeight(t->right);
return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}
void freeBTree(BTree t) {
if (t == NULL) {
return;
}
freeBTree(t->left);
freeBTree(t->right);
free(t);
}
```
exp7-1.c 代码如下:
```c
#include <stdio.h>
#include "btree.c"
int main() {
char s[] = "A(B(D,E(H(J,K(L,M,N)))),C(F,G(,I)))";
int i = 0;
BTree b = createBTree(s, &i);
printf("二叉树 b:");
printBTree(b);
printf("\n'H'结点的左、右孩子结点值:\n");
printNode(b, 'H');
printf("二叉树 b 的高度:%d\n", getHeight(b));
freeBTree(b);
return 0;
}
```
注意:需要将 btree.c 和 exp7-1.c 放在同一目录下编译链接。
阅读全文