C ++二叉树类需要什么

时间:2012-02-07 03:01:50

标签: c++ tree binary-tree

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

  

我主要用C语言编程。如果我用C ++编写二叉树类,那就行了   我需要包含一个指向root的指针作为属性,以便我可以删除   析构函数中的每个节点还是通常以另一种方式完成?

如果您为节点分配内存或者您有泄漏,您将希望能够在节点之后进行清理。

  

我需要构造函数吗?

我推荐了apocolypse的四个骑手:构造函数,析构函数,复制构造函数和赋值运算符。

  

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

我将遵循STL的例子并创建迭代器:深度优先,广度优先等等。

答案 2 :(得分:0)

如果要正确完成,则通常需要创建指向根节点的指针。如果你想将'null'根表示为空树,那么这种方式也会更容易。

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