二叉搜索树顺序树显示

时间:2015-04-06 17:23:11

标签: c++

我在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,我希望在每个递归显示函数完成后将顶部指针移回。救命。但是在显示功能中没有涉及任何参与者。

1 个答案:

答案 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();
   ...

所以...我建议树的类,节点的另一个类,树的显示方法,节点的显示方法等。

希望这有帮助...祝你好运。