Benim atama biri için bir bağlantı tabanlı BST C (ikili arama ağacı) ++ uygulamasını söyleyin. Ben bütün sınıf yazdım ve her şey iyi çalışır, ancak benim atama için çalışma sürelerini çizmek için beni sorar:
a. A sorted list of 50000, 75000, and 100000 items
b. A random list of 50000, 75000, and 100000 items
Bu iyi, ben numaraları ekleyebilirsiniz ama aynı zamanda aramamı ister FindHeight()ve CountLeaves()ağaç üzerinde yöntemleri. Benim sorunum kullanarak iki işlevi uyguladık olmasıdır recursion. Ben alıyorum alıyorum numaralarının bu kadar büyük bir liste var yana stackoverflowistisna.
İşte benim sınıf tanımı var:
template <class TItem>
class BinarySearchTree
{
public:
struct BinarySearchTreeNode
{
public:
TItem Data;
BinarySearchTreeNode* LeftChild;
BinarySearchTreeNode* RightChild;
};
BinarySearchTreeNode* RootNode;
BinarySearchTree();
~BinarySearchTree();
void InsertItem(TItem);
void PrintTree();
void PrintTree(BinarySearchTreeNode*);
void DeleteTree();
void DeleteTree(BinarySearchTreeNode*&);
int CountLeaves();
int CountLeaves(BinarySearchTreeNode*);
int FindHeight();
int FindHeight(BinarySearchTreeNode*);
int SingleParents();
int SingleParents(BinarySearchTreeNode*);
TItem FindMin();
TItem FindMin(BinarySearchTreeNode*);
TItem FindMax();
TItem FindMax(BinarySearchTreeNode*);
};
FindHeight () Uygulama
template <class TItem>
int BinarySearchTree<TItem>::FindHeight()
{
return FindHeight(RootNode);
}
template <class TItem>
int BinarySearchTree<TItem>::FindHeight(BinarySearchTreeNode* Node)
{
if(Node == NULL)
return 0;
return 1 + max(FindHeight(Node->LeftChild), FindHeight(Node->RightChild));
}
CountLeaves () uygulaması
template <class TItem>
int BinarySearchTree<TItem>::CountLeaves()
{
return CountLeaves(RootNode);
}
template <class TItem>
int BinarySearchTree<TItem>::CountLeaves(BinarySearchTreeNode* Node)
{
if(Node == NULL)
return 0;
else if(Node->LeftChild == NULL && Node->RightChild == NULL)
return 1;
else
return CountLeaves(Node->LeftChild) + CountLeaves(Node->RightChild);
}
Ben özyineleme olmadan iki yöntem uygulayabilirsiniz nasıl düşünmeye çalıştım ama tamamen stumped. Herkes herhangi bir fikir var mı?













