当前位置: 首页 > 知识库问答 >
问题:

需要二叉树程序的帮助(不是二叉搜索树)

满俊楠
2023-03-14

我试图实现一个二叉树(不是二叉搜索树)。它主要是一个由insert/delete/search和clear过程组成的类模板。节点中保存的数据可以是任何东西。如下所示:

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;
};

我需要一些算法方面的帮助,最好是迭代的(由于堆栈大小的限制,希望避免递归的),以用于插入、搜索和删除:

共有1个答案

微生俊
2023-03-14

有一个真正的理由支持英国夏令营而不是英国电信。

BST是用于插入、删除和搜索的log(N),而BT最终可能会以O(N)为代价完成树的遍历。

>

  • 插入:如何确保树不向左/向右倾斜?

    不,没有更好的方法来防止O(n)搜索。您需要遍历完整的树,在BT中没有节点的模式/顺序来帮助您有效地导航。

  •  类似资料:
    • 编写一个Lisp程序来检查一个二叉树是否是二叉搜索树。 我正在尝试编写一个二进制递归方法,但我是一个初学者,我不知道从这里去哪里。

    • 我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?

    • HLOJ 9576,习题7-2 二叉排序树 输入一个整数关键字序列,生成一棵用链式存储结构存储的二叉排序树,对该二叉排序树能进行查找和插入结点的操作,并对该二叉排序树中结点的关键字按递增和递减顺序输出。 要求依次完成以下工作: (1) 以这n个整数生成(建立)一棵用链式存储结构存储的二叉排序树; (2) 按递增顺序输出该二叉排序树中的整数(关键字); (3) 输入一个整数key1,对该二叉排序树进

    • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,

    • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

    • 我正试图解决这个问题,但我遇到了一些麻烦: 在二进制搜索树(BST)中: 节点左子树中每个节点的数据值小于该节点的数据值。 节点右侧子树中每个节点的数据值大于该节点的数据值。 如您所见,节点(4)位于节点(3)的左侧子树中,尽管4大于3,因此方法应该返回。但是,我的代码返回。 我怎么能控制这个案子?如何检查左/右子树中的所有值都低于/大于根(不仅是直接子树)?