首页 > 解决方案 > 英国夏令时。如何使用 C++ 使输出看起来像一棵树

问题描述

这是输入

这是输出

1

我正在尝试使用 C 语言创建一个 BST 树,更具体地用于我大学的练习。程序需要从输入文件中读取一些整数,对树进行一些操作,然后将新数字写入另一个文件(输出文件)。

我试过这样做,但我的输出结果不同

#include<iostream>
#include <fstream>
std::string fileName;
std::fstream readFile;

int storeFile;
using namespace std;

//Definition of Node for Binary search tree
struct BstNode {
    int data;
    BstNode* left;
    BstNode* right;
};

void inorder(struct BstNode* root) {
if (root != NULL) {
// Traverse left
inorder(root->left);
// Traverse root
cout << root->data << " -> ";
// Traverse right

inorder(root->right);
}
}
void printTree(BstNode *root, string indent, bool last) {
  if (root != nullptr) {
    cout << indent;
    if (last) {
      cout << "R----";
      indent += "   ";
    } else {
      cout << "L----";
      indent += "|  ";
    }
    cout << root->data << endl;
    printTree(root->left, indent, false);
    printTree(root->right, indent, true);
  }
}

// Function to create a new Node in heap
 BstNode* GetNewNode(int data) {
    BstNode* newNode = new BstNode();
    newNode->data = data;
    newNode->left = newNode->right = NULL;// set left and right chill equals to null
    return newNode;// return address of new node
}

// To insert data in BST, returns address of root node
 BstNode* Insert(BstNode* root,int data) {
    if(root == NULL) { // empty tree
        root = GetNewNode(data);
    }
    // if data to be inserted is lesser, insert in left subtree.
    else if(data <= root->data) {
        root->left = Insert(root->left,data);
    }
    // else, insert in right subtree.
    else {
        root->right = Insert(root->right,data);
    }
    return root;
}


int main() {
    BstNode* root = NULL;  // Creating an empty tree
    //Code to test the logic/
    string filename1_str = "bst_avl_8_input.txt";
    fstream filename1;
    filename1.open(filename1_str, ios::out);
    filename1<<"1"<<endl;
    filename1<<"2"<<endl;
    filename1<<"3"<<endl;
    filename1<<"4"<<endl;
    filename1<<"5"<<endl;
    filename1<<"6"<<endl;
    filename1<<"7"<<endl;
    filename1<<"8"<<endl;
    filename1.close();

    fileName = "bst_avl_8_input.txt";
    readFile.open(fileName); //attempts to read the file

      while(readFile >> storeFile){

          if(readFile.bad()) {
               std::cerr << "File failed to read " << std:: endl;
              break; //loop terminates
                } else {
                    root = Insert(root, storeFile);
         }
      }
    printTree(root, "", true);
    readFile.close();
}

标签: c++

解决方案


推荐阅读