Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何以特定格式C+打印二进制搜索树+;_C++_Arrays_Struct_Binary Search Tree - Fatal编程技术网

C++ 如何以特定格式C+打印二进制搜索树+;

C++ 如何以特定格式C+打印二进制搜索树+;,c++,arrays,struct,binary-search-tree,C++,Arrays,Struct,Binary Search Tree,我必须从文件中读取数据,并从中构造一个二叉搜索树 值的读取顺序。因此读取的第一个数字将是树的根。我必须尝试将数字存储在数组中。 当我将最后一个值读入BST时,我需要进行顺序遍历,以升序输出前10个值,并将其打印到5字符宽字段中的一行中 我的输出很好,按升序打印所有整数,但我想在一行中打印10个整数。我被困在这里了。有人能帮我弄清楚这个吗 我的代码: struct Node { int key; Node *left, *right; }; int NumNodes =

我必须从文件中读取数据,并从中构造一个二叉搜索树 值的读取顺序。因此读取的第一个数字将是树的根。我必须尝试将数字存储在数组中。 当我将最后一个值读入BST时,我需要进行顺序遍历,以升序输出前10个值,并将其打印到5字符宽字段中的一行中

我的输出很好,按升序打印所有整数,但我想在一行中打印10个整数。我被困在这里了。有人能帮我弄清楚这个吗

我的代码:

 struct Node
 {
    int key;
    Node *left, *right;
 };

 int NumNodes = 0;
 const int SIZE = 100;
 Node data[SIZE];

 Node* nNode(int value)
 {
    Node* temp = &data[NumNodes++];
    temp->key  = value;                  
    temp->left = temp->right = NULL; 
    return temp;
 }
      void inorder(Node *root)
{
if (root != NULL)
{
    inorder(root->left); 
    cout << root->key << setw(5) ;
    inorder(root->right);
}
Node* insert(Node* node, int key)
{
    if (node == NULL)
{
    return nNode(key);
}
if (key < node->key)
{
    node->left  = insert(node->left, key);
}
else if (key > node->key)
{
    node->right = insert(node->right, key);   
}
return node;
}

int main()
{
 int c,val,i=0;
string fileName;

Node *root = NULL;

ifstream infile;
cout << "Please enter the name of the file to open :";
cin >> fileName;                                                  // asks user to input filename
infile.open(fileName.c_str());                                    // opens file
if(!infile)
{
    cerr << "An eror occurred while openieng the file.";
    exit(1);
}

while(!infile.eof()){
    infile >> val;
    data[i].key = val;
    c=data[i].key; 

    root = insert(root, c);

    i++;        

}
infile.close();

inorder(root);


return 0;
}
struct节点
{
int键;
节点*左,*右;
};
整数节点=0;
常数int SIZE=100;
节点数据[大小];
节点*nNode(int值)
{
节点*temp=&数据[NumNodes++];
温度->键=值;
临时->左=临时->右=空;
返回温度;
}
无效索引(节点*根)
{
if(root!=NULL)
{
顺序(根->左);
cout键(右键);
}
节点*插入(节点*节点,int键)
{
if(node==NULL)
{
返回nNode(键);
}
如果(键<节点->键)
{
节点->左=插入(节点->左,键);
}
否则如果(键>节点->键)
{
节点->右侧=插入(节点->右侧,键);
}
返回节点;
}
int main()
{
int c,val,i=0;
字符串文件名;
Node*root=NULL;
河流充填;
cout>fileName;//要求用户输入文件名
infle.open(fileName.c_str());//打开文件
如果(!infle)
{
cerr>val;
数据[i].key=val;
c=数据[i]。键;
根=插入(根,c);
i++;
}
infle.close();
顺序(根);
返回0;
}
无效顺序(节点*根)
{
静态int n=0;
if(root!=NULL)
{
顺序(根->左);

程序是否包含bug,为了修复bug,您必须首先通过调试找到它。您可以使用IDE的调试器,或者(如果手头没有调试器)你可以使用类似于
的语句,难道你真的应该问一个不同的问题,而不是将这个问题变为三个。你的示例中没有包含你的
顺序
函数,因此很难给出关于看不见的代码的建议。也许可以阅读一些关于
%
功能的文档。我不能按照团队。另外,我的
inoorder
已经包含在函数中。我已经包含了
inoorder
,但我正试图在问题所在的每行打印10个数字。我的问题的评分已经很低,因为我发布了两个标题相同的问题,这就是为什么我必须更改标题才能使其正常工作
static int n
不是一个好主意!如果您多次调用该函数,如果上一次打印没有10个项目的倍数,它将无法正确分割行。或者可以将int i声明为全局,然后它将工作,而如果仅从单个线程调用
inorder
,它仍然可以工作,因为该函数做得太多,所以它的设计仍然很差至少,对每个项执行的遍历和操作应该是独立的。
void inorder(Node *root)
{
static int n=0;         
if (root != NULL)
{
    inorder(root->left);
    cout << setw(5) << root->key;  
    if(n%10==9)cout << endl;
    n++;
    inorder(root->right);

}
}