【发布时间】:2012-02-07 03:01:49
【问题描述】:
我主要使用 C 进行编程。如果我在 C++ 中创建二叉树类,是否需要包含指向根的指针作为属性,以便我可以删除析构函数中的每个节点,或者通常以另一种方式完成?我需要构造函数吗?
除此之外,我只有左右数据和方法,对吗?
【问题讨论】:
标签: c++ tree binary-tree
我主要使用 C 进行编程。如果我在 C++ 中创建二叉树类,是否需要包含指向根的指针作为属性,以便我可以删除析构函数中的每个节点,或者通常以另一种方式完成?我需要构造函数吗?
除此之外,我只有左右数据和方法,对吗?
【问题讨论】:
标签: c++ tree binary-tree
通常,C++ 对象的设计目的是不能将自己从容器中删除。相反,容器(在这种情况下是你的二叉树)被认为是对象的所有者。当容器决定删除节点时(可能基于您的代码的某些请求),将调用析构函数。
有一个指向二叉树根的指针会违反封装。理想情况下,您希望您的对象也能够插入到其他容器中,例如向量。例如,标准类型std::string 不知道它可能插入什么。它的析构函数只负责清理自己内部的东西。
【讨论】:
我主要使用 C 进行编程。如果我使用 C++ 创建二叉树类,请执行 我需要包含一个指向根的指针作为属性,以便我可以删除 析构函数中的每个节点还是通常以其他方式完成?
如果您为节点分配内存,您将希望能够在节点之后进行清理,否则会出现泄漏。
我需要构造函数吗?
我推荐天启四骑士:构造函数、析构函数、复制构造函数和赋值运算符。
除此之外,我只有左、右和方法的数据, 对吗?
我会按照 STL 的示例创建迭代器:深度优先、广度优先等。
【讨论】:
如果您希望正确完成,通常需要创建指向根节点的指针。如果您想将“null”根表示为空树,这种方式也更容易。
大多数对象都应该有构造函数,在这种情况下,构造函数的正确使用可能是另一个二叉搜索树(复制它)。
【讨论】: