Loading... ## 第一题 【问题描述】 任意建立一棵二叉树,树的形态自定,输出该二叉树的前序遍历序列。 【输入样例】 ABC##DE###FG#H### 【输出样例】 ABCDEFGH ```C++ #include <stdio.h> #include <stdlib.h> typedef struct node { char data; struct node* left; struct node* right; } Node; void PreOrder(Node* root) { if (root != NULL) { printf("%c", root->data); PreOrder(root->left); PreOrder(root->right); } } Node* CreateTree(char* preOrder, int* index) { Node* newNode = NULL; if (preOrder[*index] != '#') { newNode = (Node*)malloc(sizeof(Node)); newNode->data = preOrder[*index]; (*index)++; newNode->left = CreateTree(preOrder, index); (*index)++; newNode->right = CreateTree(preOrder, index); } return newNode; } int main() { char preOrder[] = "ABC##DE###FG#H###"; int index = 0; Node* root = CreateTree(preOrder, &index); PreOrder(root); return 0; } ``` ## 第二题 【问题描述】 任意建立一棵二叉树,树的形态自定,输出该二叉树的中序遍历序列。 【输入样例】 ABC##DE###FG#H### 【输出样例】 CBEDAGHF ```C++ #include <stdio.h> #include <stdlib.h> typedef struct node { char data; struct node* left; struct node* right; } Node; void InOrder(Node* root) { if (root != NULL) { InOrder(root->left); printf("%c", root->data); InOrder(root->right); } } Node* CreateTree(char* preOrder, int* index) { Node* newNode = NULL; if (preOrder[*index] != '#') { newNode = (Node*)malloc(sizeof(Node)); newNode->data = preOrder[*index]; (*index)++; newNode->left = CreateTree(preOrder, index); (*index)++; newNode->right = CreateTree(preOrder, index); } return newNode; } int main() { char preOrder[] = "ABC##DE###FG#H###"; int index = 0; Node* root = CreateTree(preOrder, &index); InOrder(root); return 0; } ``` ## 第三题 【问题描述】 任意建立一棵二叉树,树的形态自定,输出该二叉树的后序遍历序列。 【输入样例】 ABC##DE###FG#H### 【输出样例】 CEDBHGFA ```C++ #include <stdio.h> #include <stdlib.h> typedef struct node { char data; struct node* left; struct node* right; } Node; void PostOrder(Node* root) { if (root != NULL) { PostOrder(root->left); PostOrder(root->right); printf("%c", root->data); } } Node* CreateTree(char* preOrder, int* index) { Node* newNode = NULL; if (preOrder[*index] != '#') { newNode = (Node*)malloc(sizeof(Node)); newNode->data = preOrder[*index]; (*index)++; newNode->left = CreateTree(preOrder, index); (*index)++; newNode->right = CreateTree(preOrder, index); } return newNode; } int main() { char preOrder[] = "ABC##DE###FG#H###"; int index = 0; Node* root = CreateTree(preOrder, &index); PostOrder(root); return 0; } ``` ## 第四题 【问题描述】 任意建立一棵二叉树,计算其叶子结点个数。 【输入样例】 ABC##DE###FG#H### 【输出样例】 3 ```C++ #include <stdio.h> #include <stdlib.h> typedef struct node { char data; struct node* left; struct node* right; } Node; int LeafCount(Node* root) { if (root == NULL) { return 0; } else if (root->left == NULL && root->right == NULL) { return 1; } else { return LeafCount(root->left) + LeafCount(root->right); } } Node* CreateTree(char* preOrder, int* index) { Node* newNode = NULL; if (preOrder[*index] != '#') { newNode = (Node*)malloc(sizeof(Node)); newNode->data = preOrder[*index]; (*index)++; newNode->left = CreateTree(preOrder, index); (*index)++; newNode->right = CreateTree(preOrder, index); } return newNode; } int main() { char preOrder[] = "ABC##DE###FG#H###"; int index = 0; Node* root = CreateTree(preOrder, &index); int count = LeafCount(root); printf("%d\n", count); return 0; } ``` ## 第五题 【问题描述】 任意建立一棵二叉树,计算其深度。 【输入样例】 ABC##DE###FG#H### 【输出样例】 4 ```C++ #include <stdio.h> #include <stdlib.h> typedef struct node { char data; struct node* left; struct node* right; } Node; int Depth(Node* root) { if (root == NULL) { return 0; } else { int leftDepth = Depth(root->left); int rightDepth = Depth(root->right); return (leftDepth > rightDepth) ? (leftDepth + 1) : (rightDepth + 1); } } Node* CreateTree(char* preOrder, int* index) { Node* newNode = NULL; if (preOrder[*index] != '#') { newNode = (Node*)malloc(sizeof(Node)); newNode->data = preOrder[*index]; (*index)++; newNode->left = CreateTree(preOrder, index); (*index)++; newNode->right = CreateTree(preOrder, index); } return newNode; } int main() { char preOrder[] = "ABC##DE###FG#H###"; int index = 0; Node* root = CreateTree(preOrder, &index); int depth = Depth(root); printf("%d\n", depth); return 0; } ``` 最后修改:2024 年 01 月 13 日 © 允许规范转载 赞 1 如果觉得我的文章对你有用,请随意赞赏