我正在尝试实现二叉树(不是二叉搜索树) . 它主要是一个由插入/删除/搜索和清除程序组成的类模板 . 节点中保存的数据可以是任何数据 . 如下所示:
template
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* root);
virtual void preorder(Node* root);
virtual void postorder(Node* root);
virtual void removeAll(Node* root);
Node* root;
int max;
unsigned int curSize;
};
我需要一些关于算法的帮助, preferably iterative (希望避免因堆栈大小限制而递归),用于插入,搜索和删除:
插入:如何确保树不会左/右倾斜?
删除:当节点同时具有子节点时,删除的最佳方法是什么(例如:在BST中,用inorder后继替换) .
搜索:有没有有效的方法来阻止O(n)搜索?
网络上有大量资源用于BST程序(主要是递归),但没有二进制树(或至少我无法找到任何东西) . 因此想到在这里张贴它 .