学java需要学二叉树吗_需要有关二叉树过程的帮助(非二叉搜索树)

我正在尝试实现二叉树(不是二叉搜索树) . 它主要是一个由插入/删除/搜索和清除程序组成的类模板 . 节点中保存的数据可以是任何数据 . 如下所示:

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程序(主要是递归),但没有二进制树(或至少我无法找到任何东西) . 因此想到在这里张贴它 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值