我遇到了将节点随机插入二叉树的问题,我知道二进制树的基本实现,但我从来没有在程序中使用过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 );
}
}
}
答案 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);
}
}