我想實現一個二叉樹(不是二叉搜索樹)。它將主要是一個由插入/刪除/搜索&清除程序組成的類模板。保存在節點中的數據可以是任何東西。類似下面:需要幫助二叉樹程序(非二叉搜索樹)
template<class T>
class BinaryTree
{
public:
BinaryTree(int size);
~BinaryTree();
virtual bool insert(T data);
virtual bool remove(T data);
virtual void clear();
virtual bool search(T data);
virtual void display(std::string str, ETravType type);
virtual unsigned int getSize();
//friend void swapWithLastNode(Node *root, Node **nodeToRemove);
protected:
virtual void inorder(Node<T>* root);
virtual void preorder(Node<T>* root);
virtual void postorder(Node<T>* root);
virtual void removeAll(Node<T>* root);
Node<T>* root;
int max;
unsigned int curSize;
};
我需要在算法的一些幫助,最好迭代(要避免重複,由於堆棧大小限制),用於插入,搜索&刪除:
插入:如何確保樹不會左右偏斜?
刪除:當節點同時擁有兩個子節點時,刪除的最佳方式是什麼(例如:在BST中,用inorder後繼替換)。
搜索:有沒有有效的方法來防止O(n)搜索?
有資源的網絡的BST程序(主要是遞歸)上的豐富,但沒有二叉樹(或至少我無法找到任何東西)。因此想到在這裏發佈它。
您對插入的問題,並刪除似乎表明對我說,你不關心節點的樹,並在這一點上我要問你爲什麼即使使用二叉樹而不是位置只是一個單鏈表? – PeterT