【发布时间】:2018-11-05 09:28:20
【问题描述】:
#include<iostream>
using namespace std;
struct node
{
int data;
node *right;
node *left;
} ;
node *root = NULL;
node *right = NULL;
node *left = NULL;
node insert(int data)
{
node *ptr = new node;
ptr->data = data;
ptr->left = NULL;
ptr->right = NULL;
if(root==NULL)
{
root = ptr;
cout<<"Inserted "<<root->data<<" at root\n";
}
else
{
node *pos = root;
while(pos)
{
cout<<pos->data<<" pos->data\n";
if(pos->data > data)
{
cout<<pos->data<<": data\n";
pos = pos->left;
}
else if(pos->data < data)
{
cout<<pos->data<<": data\n";
pos = pos->right;
}
if(!pos)
cout<<"NULL\n";
}
pos = ptr;
cout<<"Inserted\n";
}
return *root;
}
void preorder(node *root)
{
if(root)
{
cout<<root->data;
preorder(root->left);
preorder(root->right);
}
}
int main()
{
insert(2);
insert(1);
insert(3);
insert(4);
insert(5);
preorder(root);
return 0;
}
在这里,在插入新元素时,我将root 指向新变量pos,这样根就不会改变,因此它会正确地成为函数preorder() 的参数,因为它是实际的根
但是,pos 没有插入所有元素,也没有显示所需的结果。简而言之,我必须使用 root 而不是 pos 来插入,但直接使用 root 会改变“实际”根(在本例中为 2)。
【问题讨论】:
-
如果您需要 C++ 程序方面的帮助,请不要将 C 和 C++ 标记放在同一个问题上。
-
不要使用全局变量,它们很容易出错,使用范围变量几乎总是更好。
-
另外,您的实际问题是什么?!
-
好的!!明白了:D
-
只是变量 pos 没有给出所需的结果。它没有遍历节点。它只是一次又一次地显示根目录。用 root 替换 pos 给出了解决方案,但是 root 指针被改变了。
标签: c++ data-structures tree binary-tree