मैं अपने काम में से एक के लिए एक कड़ी के आधार पर BST (बाइनरी खोज पेड़) C ++ को लागू किया है। मैं अपने पूरी कक्षा में लिखा है और सब कुछ अच्छा काम करता है, लेकिन मेरे काम मेरे लिए रन-बार प्लॉट करने के लिए पूछते हैं:
a. A sorted list of 50000, 75000, and 100000 items
b. A random list of 50000, 75000, and 100000 items
यह ठीक है, मैं संख्याएं डाल सकते हैं लेकिन यह भी मुझे पूछता है कॉल करने के लिए FindHeight()और CountLeaves()पेड़ पर तरीकों। मेरी समस्या यह है कि मैं का उपयोग कर दो कार्यों को क्रियान्वित किया है है recursion। जब से मैं संख्या मैं एक हो रही हो रही है की एक इतनी बड़ी सूची है stackoverflowअपवाद।
यहाँ मेरी कक्षा परिभाषा है:
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 () कार्यान्वयन
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 () कार्यान्वयन
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);
}
मैं कैसे मैं प्रत्यावर्तन के बिना दो तरीकों को लागू कर सकते के बारे में सोच की कोशिश की लेकिन मैं पूरी तरह से स्टंप्डया हूँ। क्या किसी के भी पास कोई सुझाव है?













