我在BST root和top中使用了两个指针。顶部指针沿树移动以便插入和显示。现在我的问题是我的订单代码。我将顶部指针向下移动到树,直到通过递归找到NULL,如下所示
void display()
{
if(top->left!=NULL)
{
top=top->left;
display();
}
cout<<"\n\nnow the address of top is "<<top;
return;
}
树中的元素暂时为12 11和10;现在在函数的最后一次递归调用中,顶部指针移动到10但是如何在最后一个函数之后将顶部指针移回;在每个cout中,top的地址为10表示即使控件返回到先前的递归函数,指针也保持在10。在这段代码中有两个递归函数,显示被称为两次,在第二个显示函数之后,顶部指针没有向上移动树而是保持在10,我希望在每个递归显示函数完成后将顶部指针移回。救命。但是在显示功能中没有涉及任何参与者。
答案 0 :(得分:1)
在此示例中,您的代码似乎是从每棵树的左侧踩下(但忽略右侧)。
if(top->left!=NULL)
{
top=top->left;
display();
}
通常,BST有节点,每个节点都有数据,ptr到左子,ptr到右子。
您的节点似乎还没有包含“display()”方法。
在树中,我怀疑你想要调用
<a node> -> display();
避免在递归“显示”调用中传递指针。
接下来,你的名字会误导我(对我而言)。因此,如果您重命名某些内容,以下内容可能适合您,也更容易理解。
每个节点至少需要3个部分和显示方法。对于深度优先搜索,在线显示可能会引发一些想法。
Node::display(void)
{
// first, display nodes of left side-of-tree
if(nullptr != left)
{
left->display();
}
// else no left node available
// for in-order, cout the data at this node
std::cout << data << std::endl;
// continue the depth-first display by tracing the right side
if (nullptr != right)
{
right->display();
}
}
要开始显示轨道,您需要拥有树的锚点。也许是这样的事情:
Tree::display()
{
if(tree.Top) // is tree not empty?
tree.Top->display();
...
所以...我建议树的类,节点的另一个类,树的显示方法,节点的显示方法等。
希望这有帮助...祝你好运。