随机插入到左或右二叉树

Random insertion to left or right in binary tree

本文关键字:二叉树 插入 随机      更新时间:2023-10-16

我有一个随机插入节点到二叉树的问题,我知道二叉树的基本实现,但我从来没有在程序中使用过typedef enum,事实上这是我第一次不得不使用它。谁能指出我在正确的方向,我将如何实现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 );
        }
    }
}

这样写

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);
  }
}