【问题标题】:What's needed in a C++ binary tree classC++ 二叉树类需要什么
【发布时间】:2012-02-07 03:01:49
【问题描述】:

我主要使用 C 进行编程。如果我在 C++ 中创建二叉树类,是否需要包含指向根的指针作为属性,以便我可以删除析构函数中的每个节点,或者通常以另一种方式完成?我需要构造函数吗?

除此之外,我只有左右数据和方法,对吗?

【问题讨论】:

    标签: c++ tree binary-tree


    【解决方案1】:

    通常,C++ 对象的设计目的是不能将自己从容器中删除。相反,容器(在这种情况下是你的二叉树)被认为是对象的所有者。当容器决定删除节点时(可能基于您的代码的某些请求),将调用析构函数。

    有一个指向二叉树根的指针会违反封装。理想情况下,您希望您的对象也能够插入到其他容器中,例如向量。例如,标准类型std::string 不知道它可能插入什么。它的析构函数只负责清理自己内部的东西。

    【讨论】:

      【解决方案2】:

      我主要使用 C 进行编程。如果我使用 C++ 创建二叉树类,请执行 我需要包含一个指向根的指针作为属性,以便我可以删除 析构函数中的每个节点还是通常以其他方式完成?

      如果您为节点分配内存,您将希望能够在节点之后进行清理,否则会出现泄漏。

      我需要构造函数吗?

      我推荐天启四骑士:构造函数、析构函数、复制构造函数和赋值运算符。

      除此之外,我只有左、右和方法的数据, 对吗?

      我会按照 STL 的示例创建迭代器:深度优先、广度优先等。

      【讨论】:

        【解决方案3】:

        如果您希望正确完成,通常需要创建指向根节点的指针。如果您想将“null”根表示为空树,这种方式也更容易。

        大多数对象都应该有构造函数,在这种情况下,构造函数的正确使用可能是另一个二叉搜索树(复制它)。

        【讨论】:

          猜你喜欢
          • 2010-12-23
          • 2019-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-15
          • 2020-08-03
          • 2010-11-14
          • 1970-01-01
          相关资源
          最近更新 更多