[英]Binary Search tree Inorder tree display
我在BST根目录和顶部使用两个指针。 顶部指针沿树移动以进行插入和显示。 现在我的问题是在我的订单代码中。 我将顶部指针向下移动到树,直到通过递归发现时间为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中,顶部的地址都是10,这意味着即使控件返回到先前的递归函数,指针也将保持在10。 此代码中有两个递归函数,显示被称为两次,第二个显示函数之后,顶部指针不会在树上向上移动,而是保持在10上,我想在完成每个递归显示功能后将顶部指针向后移动。 救命。 但是在显示功能中不涉及参数。
在此示例中,您的代码似乎正在逐步降低每棵树的左侧(但忽略了右侧)。
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();
...
所以...我建议针对树的类,针对节点的另一类,针对树的显示方法,针对节点的显示方法等。
希望这有帮助,祝你好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.