C++二进制搜索树切换语句问题
C++ Binary search tree switch statement issue
嗨,我正在尝试实现一个二进制搜索树,但switch语句有问题。值-1应该用于访问菜单,它可以工作,但同时它是在树的顶部输入的。一旦我进入菜单,我输入的任何数字也会出现在树中,下面是代码,它不会给我任何错误,但我无法理解switch case语句,任何帮助都将不胜感激。
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <stdio.h>
using namespace std;
struct node
{
int data;
node *left;
node *right;
};
void insert(node **tree, int value)
{
if (*tree == nullptr)
{
*tree = new node;
(*tree)->data = value;
(*tree)->left = nullptr;
(*tree)->right = nullptr;
}
else
{
if(value < (*tree)->data)
{
// Adding & because (*tree) is a type: node*
// & references it in the form of a node**
// Which is what the function expects
insert( &((*tree)->left) , value);/**/
}
else if(value > (*tree)->data)
{
insert( &((*tree)->right) , value);
}
else
{
return;
}
}
}
void inorder(node *tree)
{
if (tree != nullptr)
{
inorder(tree->left);
cout << tree->data << ", ";
inorder(tree->right);
}
}
void preOrder(node *tree)
{
if (tree != nullptr)
{
cout << tree->data << ", ";
preOrder(tree->left);
preOrder(tree->right);
}
}
void postOrder(node *tree)
{
if (tree != nullptr)
{
postOrder(tree->left);
postOrder(tree->right);
cout << tree->data << ", ";
}
}
void delete_tree(node *tree)
{
if(tree != NULL)
{
delete_tree(tree->left);
delete_tree(tree->right);
delete tree;
cout << "value deleted: " << tree->data << endl;
}
}
int main(int argc, char **argv)
{
node *tree = nullptr;
while (true)
{
int num;
cout << "nnEnter a value into the tree(type -1 for options)n";
cin >> num;
insert(&tree, num);
while(num == -1)
{
cout<<endl<<endl;
cout<<" Binary Search Tree Operations "<<endl;
cout<<" ----------------------------- "<<endl;
cout<<" 0. Print in order "<<endl;
cout<<" 1. Pre-Order Traversal "<<endl;
cout<<" 2. Post-Order Traversal "<<endl;
cout<<" 3. Insert number "<<endl;
cout<<" 4. Delete tree "<<endl;
cout<<" Enter your choice : ";
cin>>num;
}
switch(num)
{
case 0 :
cout<<endl;
cout<<" Printing in Order "<<endl;
cout<<" -------------------"<<endl;
inorder(tree);
break;
case 1 :
cout<<" Pre-Order Traversal "<<endl;
cout<<" -------------------"<<endl;
preOrder(tree);
break;
case 2 :
cout<<" Post-Order Traversal "<<endl;
cout<<" -------------------"<<endl;
postOrder(tree);
break;
case 3 :
cout<<" Insert number into the tree "<<endl;
cout<<" -------------------"<<endl;
insert(&tree, num);
break;
case 4 :
cout<<" delete the tree "<<endl;
cout<<" -------------------"<<endl;
delete_tree(tree);
break;
}
}
return 0;
}
后有insert(&tree, num);
cout << "nnEnter a value into the tree(type -1 for options)n";
cin >> num;
所以,即使是-1,你也总是会加一个数字。在调用insert之前,您需要检查-1。
相关文章:
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- Craps游戏问题,忽略if语句
- Arduino 用于语句错误。令牌之前的预期')' ';'。如何解决这个问题?
- 有人能在我的代码中找到与C++中的IF语句相关的问题吗
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- 如果 GPA 计算器的语句问题
- C++:关于for语句和参数的一般问题
- C - 如果语句问题.代码将不会运行其他,否则
- C++ 在循环时执行 if 语句问题
- C++二进制搜索树切换语句问题
- C++If Else语句问题
- C++中的条件语句问题
- Switch语句问题
- ASCII和isalpha if语句问题
- 语句问题中要字符串的CPP int
- If语句问题
- c++ If语句问题-显示错误信息
- c++ if/else语句问题
- Switchcase语句问题.从文本文件中读取信息