使用BST实现堆栈

时间:2012-11-07 15:14:03

标签: binary-search-tree

我想使用BST实现堆栈(推送和弹出操作)。

在BST中的邮政订单遍历期间,根在迭代中遍历堆栈的顶部。 那么,这是否意味着我必须插入和删除根或其他内容的元素?

1 个答案:

答案 0 :(得分:1)

  int num=1;
  struct node
 {
     int flag;
     int val;
     node *left,*right,*parent;
  };

 node* tree::InorderTraversalusingInBuiltstack()
 {
      stack<node *> p;
      node *current=root;

     while(!p.empty()|| current!=NULL)
     {
          while(current!=NULL)
          {
               p.push(current);
               current=current->left;
          }
          current=p.top();
          if(current->flag==num)
          {
              return current;
           }
           p.pop();
           current=current->right;
      }
  }


  void tree::StackUsingBST()
  {
      node *q;

      while(root!=NULL)
       {
              num--;

              q=InorderTraversalusingInBuiltqueue();


              node *a=q->parent;
              if(a!=NULL)
              {
                  if(a->left==q)
                       a->left=NULL;
                  else
                       a->right=NULL;

                  q->parent=NULL;
                  delete q;

                  disp();
                  cout<<endl;
               }

               else
               {

                  delete q;
                  root=NULL;
                }



      } 
   }

这里我的方法是通过使用标志变量来修改我的数据结构 作为全局变量;

假设首先插入8然后其对应的标志值为1 然后插入12其标志值= 2 然后插入3其标志值= 3

现在为了使用BST作为堆栈我必须删除最后插入的元素,并根据我的算法具有最高标志值。

另请注意,插入的最后一个元素没有任何子元素,因此删除它非常容易。

为了找到节点可用的最高标志值,我使用堆栈进行了一个inordertraversal,这比它的递归遍历更好。

在找到对应于最高标志值的节点后,我删除该节点。 重复此过程,直到root = NULL。