【问题标题】:C++ Binary search tree switch statement issueC++ 二叉搜索树 switch 语句问题
【发布时间】:2015-03-27 16:37:13
【问题描述】:

您好,我正在尝试实现二叉搜索树,但我在使用 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 << "\n\nEnter 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;
}

【问题讨论】:

    标签: c++ menu switch-statement binary-search-tree


    【解决方案1】:

    你有insert(&amp;tree, num);之后

    cout << "\n\nEnter a value into the tree(type -1 for options)\n";
    cin >> num;
    

    因此,即使是 -1,您也将始终添加一个数字。您需要在调用 insert 之前检查 -1。

    【讨论】:

    • 非常感谢,这几乎解决了我的问题,但我的函数 - inorder(tree)、preOrder(tree)、insert(&tree, num) 和 delete_tree(tree) - 仍然运行插入 0 到 4 之间的数字,而不是等待输入 -1。我做错了什么?
    猜你喜欢
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多