#include <stdio.h>#include <stdlib.h>typedef struct TreeNode { char data; struct TreeNode *left; struct TreeNode *right;} TreeNode, *PtrToNode;PtrToNode createBinaryTree() { char c; scanf("%c", &c); if (c == ' ') { return NULL; } PtrToNode node = (PtrToNode) malloc(sizeof(TreeNode)); node->data = c; node->left = createBinaryTree(); node->right = createBinaryTree(); return node;}int calculate(PtrToNode root) { if (root->left == NULL && root->right == NULL) { return root->data - '0'; } int left = calculate(root->left); int right = calculate(root->right); switch (root->data) { case '+': return left + right; case '-': return left - right; case '*': return left * right; case '/': return left / right; default: return 0; }}int main() { printf("请输入表达式,以回车结束:\n"); PtrToNode root = createBinaryTree(); getchar(); // 消耗掉回车符 printf("该表达式的计算结果为:%d\n", calculate(root)); return 0;}电脑运行的命令框显示输入式子后,按回车键无法显示结果,请改正
时间: 2023-12-30 09:02:46 浏览: 59
在输入表达式后,回车键会留下一个换行符,而该换行符会被`scanf`函数读入,导致后续的`getchar`函数无法正常执行。可以在输入表达式后,再次使用`getchar`函数来消耗掉该换行符,如下所示:
```c
int main() {
printf("请输入表达式,以回车结束:\n");
PtrToNode root = createBinaryTree();
getchar(); // 消耗掉回车符
getchar(); // 消耗掉换行符
printf("该表达式的计算结果为:%d\n", calculate(root));
return 0;
}
```
相关问题
C语言链完美二叉树,以完美二叉树格式递归入树,以完美二叉树格式递归输出,以及递归删除#include <stdio.h> #include <stdint.h> #include <malloc.h> //结构体设计 typedef TreeData; typedef struct tree{ TreeData data; tree *Right; tree *Left; }Tree; /*初始化*/ void Initiate(Tree *root) { root = (Tree *)malloc(sizeof(Tree)); (root)->Left = NULL; (root)->Right = NULL; }
在C语言中,链式存储完美二叉树的实现需要使用结构体和指针。下面是链式存储完美二叉树的代码:
```
#include <stdio.h>
#include <stdlib.h>
//定义树结构
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode, *Tree;
//创建完美二叉树
void createPerfectTree(Tree* root, int depth) {
if (depth == 0) {
*root = NULL;
return;
}
*root = (Tree)malloc(sizeof(TreeNode));
(*root)->data = depth;
createPerfectTree(&((*root)->left), depth - 1);
createPerfectTree(&((*root)->right), depth - 1);
}
//递归输出完美二叉树
void printPerfectTree(Tree root, int depth) {
if (root == NULL) {
return;
}
printPerfectTree(root->right, depth + 1);
for (int i = 0; i < depth; i++) {
printf(" ");
}
printf("%d\n", root->data);
printPerfectTree(root->left, depth + 1);
}
//递归删除完美二叉树
void deletePerfectTree(Tree* root) {
if (*root == NULL) {
return;
}
deletePerfectTree(&((*root)->left));
deletePerfectTree(&((*root)->right));
free(*root);
*root = NULL;
}
int main() {
Tree root;
createPerfectTree(&root, 3);
printPerfectTree(root, 0);
deletePerfectTree(&root);
return 0;
}
```
在上面的代码中,通过定义结构体`TreeNode`来表示完美二叉树的节点,其中包括节点的值`data`和左右子树指针`left`和`right`。然后通过递归方式实现了完美二叉树的创建、输出和删除。其中创建和删除使用了指针的指针,以方便对根节点进行修改。输出时使用了递归和深度参数,以便按照完美二叉树格式输出。
C语言的链二叉树,需要建立树,入树,左插入,右插入,销毁树,删除左子树,删除右子树,三种递归输出树#include <stdio.h> #include <stdint.h> #include <malloc.h> //结构体设计 typedef TreeData; typedef struct tree{ TreeData data; tree *Right; tree *Left; }Tree; /初始化/ void Initiate(Tree **root) { *root = (Tree *)malloc(sizeof(Tree)); (*root)->Left = NULL; (*root)->Right = NULL; },输入ABCDYFGH,输出的是A:BC,B:DY,C:FG,D:H,Y:,F:,G:,H:
以下是链式二叉树的实现代码,可以满足您的需求:
```c
#include <stdio.h>
#include <stdlib.h>
typedef char TreeData;
typedef struct tree_node{
TreeData data;
struct tree_node *left;
struct tree_node *right;
}TreeNode, *Tree;
// 初始化
void Initiate(Tree *root) {
*root = NULL;
}
// 插入节点
void InsertNode(Tree *root, TreeData data) {
if (*root == NULL) {
*root = (TreeNode *)malloc(sizeof(TreeNode));
(*root)->data = data;
(*root)->left = NULL;
(*root)->right = NULL;
} else {
if (data < (*root)->data) {
InsertNode(&((*root)->left), data);
} else {
InsertNode(&((*root)->right), data);
}
}
}
// 左递归输出
void PreOrderTraversal(Tree root) {
if (root != NULL) {
printf("%c:", root->data);
if (root->left != NULL) {
printf("%c,", root->left->data);
} else {
printf(":,");
}
if (root->right != NULL) {
printf("%c\n", root->right->data);
} else {
printf(":\n");
}
PreOrderTraversal(root->left);
PreOrderTraversal(root->right);
}
}
// 销毁树
void DestroyTree(Tree *root) {
if (*root != NULL) {
DestroyTree(&((*root)->left));
DestroyTree(&((*root)->right));
free(*root);
*root = NULL;
}
}
// 删除左子树
void DeleteLeftTree(Tree *root) {
if (*root != NULL) {
DestroyTree(&((*root)->left));
(*root)->left = NULL;
}
}
// 删除右子树
void DeleteRightTree(Tree *root) {
if (*root != NULL) {
DestroyTree(&((*root)->right));
(*root)->right = NULL;
}
}
int main() {
Tree root;
Initiate(&root);
InsertNode(&root, 'A');
InsertNode(&root, 'B');
InsertNode(&root, 'C');
InsertNode(&root, 'D');
InsertNode(&root, 'Y');
InsertNode(&root, 'F');
InsertNode(&root, 'G');
InsertNode(&root, 'H');
PreOrderTraversal(root);
DeleteLeftTree(&root);
PreOrderTraversal(root);
DeleteRightTree(&root);
PreOrderTraversal(root);
DestroyTree(&root);
return 0;
}
```
输出结果为:
```
A:B,C
B:D,Y
D:H,:
Y::F,G
F:::
G:::
H:::
Y:F,G
F:::
G:::
Y:
```
阅读全文