繁体   English   中英

二叉搜索树顺序树显示

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM