在二叉树中向左或向右随机插入

时间:2016-10-18 23:02:33

标签: c++ random tree insert binary-tree

我遇到了将节点随机插入二叉树的问题,我知道二进制树的基本实现,但我从来没有在程序中使用过typedef枚举,实际上这是第一次曾经不得不使用它。任何人都可以指出我如何在我的程序中实现typedef语句的正确方向,以便在右侧或左侧子树中随机创建一个新节点?

这是我必须使用的typedef语句,并且不知道如何使用。

 typedef enum { left_side, right_side } SIDE;
 SIDE rnd ( ) { return rand ( ) % 2 ? right_side : left_side; }

这是我的二叉树类和插入函数。

template < class T > class binTree {
    public:
        binTree ( ); // default constructor
        unsigned height ( ) const; // returns height of tree
        virtual void insert ( const T& ); // inserts a node in tree
        void inorder ( void ( * ) ( const T& ) ); // inorder traversal of tree
    protected:
        Node < T >* root; // root of tree
    private:
        unsigned height ( Node < T >* ) const; // private version of height ( )
        void insert ( Node < T >*&, const T& ); // private version of insert ( )
        void inorder ( Node < T >*, void ( * ) ( const T& ) ); // private version of inorder ( )
};

 // inserts a node in shortest subtree
template <class T>
void binTree <T>::insert( const T& v )
{ //thi is how i am used to  inserting into binary trees
    insert( root, v ); // call recursive
}

//private version of insert
template <class T>
void binTree <T>::insert( Node <T>* & p, const T& v )
{

     if( p == NULL )
     {
        Node <T> * newNode;
        newNode = new Node <T>( v ); // new node with new value
        p = newNode; // set ptr to new node
     }

    else
    {
        int lHeight = height( p->left );
        int rHeight = height( p->right );

        if( lHeight <= rHeight )
        {
            insert( p->left, v );
        }
        else
        {
            insert( p->right, v );
        }
    }
}

1 个答案:

答案 0 :(得分:1)

以这种方式使用

template <class T>
void binTree<T>::insert( Node<T>*& p, const T& v){

if (p == NULL)
root = new Node<T> (v);

else{
SIDE s = rnd();
  if(s == left_side)
  insert(p->left, v);
  else
  insert(p->right,v);

  }
}