由括号表达式递归创建二叉树并显示C语言
时间: 2023-11-12 13:03:55 浏览: 82
代码该怎么写?
可以按照以下的C语言代码实现:
#include <stdio.h>
#include <stdlib.h>
/* 树的节点结构 */
struct node {
char data;
struct node *left_child;
struct node *right_child;
};
/* 创建新节点 */
struct node* new_node(char data) {
struct node* node = (struct node*) malloc(sizeof(struct node));
node->data = data;
node->left_child = NULL;
node->right_child = NULL;
return(node);
}
/* 使用后缀表达式递归创建二叉树 */
struct node* create_binary_tree(char expr[]) {
// 栈用于存储节点
struct node* stack[100];
int top = -1;
for(int i = 0; expr[i] != '\0'; i++) {
if(expr[i] == '(') {
// 左括号下一个一定为操作符
i++;
// 创建新节点
struct node* new = new_node(expr[i]);
// 将新节点压入栈中
top++;
stack[top] = new;
}
else if (expr[i] == ')') {
// 弹出栈顶的两个节点
struct node* right_node = stack[top];
top--;
struct node* left_node = stack[top];
top--;
// 将左右节点连接到根节点上
stack[top+1]->left_child = left_node;
stack[top+1]->right_child = right_node;
// 根节点压入栈中
top++;
stack[top] = stack[top+1];
}
}
return stack[top];
}
/* 中序遍历输出二叉树 */
void inorder(struct node *root) {
if(root != NULL) {
inorder(root->left_child);
printf("%c ", root->data);
inorder(root->right_child);
}
}
/* 主函数 */
int main() {
char expr[] = "(((a+b)-c)*d)";
struct node* root = create_binary_tree(expr);
printf("中序遍历输出二叉树: ");
inorder(root);
return 0;
}
在程序中,我们首先定义了树的节点结构,然后通过new_node函数创建新节点。接下来使用后缀表达式创建二叉树,遍历中序输出。在create_binary_tree函数中,通过一个栈来存储已经创建的节点,按照左括号和右括号的方式递归地创建二叉树;在inorder函数中,中序遍历二叉树,并输出节点的数据。
阅读全文