【发布时间】:2013-05-31 17:14:53
【问题描述】:
我正在尝试实现一棵二叉树(如果它是通用二叉树或二叉搜索树则不重要),我在创建节点并将其链接到树的函数时遇到了一些问题。
这是我目前写的代码:
class BinaryTree {
class Node {
char data;
Node* leftChild;
Node* rightChild;
Node(char d, Node* lc, Node* rc):
data(d), leftChild(lc), rightChild(rc) {}
} *head;
int treeSize;
public:
BinaryTree(): head(0), treeSize(0) {}
// totally wrong code
void createNode(char dat) {
if (head->data < dat)
head->leftChild = new Node(dat, 0, 0);
if (head->rightChild == 0)
head->rightChild = new Node(dat, 0, 0);
if (head == 0) {
head = new Node(dat, head, head);
}
}
};
好吧,我想用链表来实现二叉树,但在这种情况下,问题是head 指针将指向最后添加的节点之一,而不是根。以这种方式使用链表的另一个问题可能是找到要添加新节点的节点的空子节点。
有人可以帮助我,或许可以提出更好的方法来实现二叉树?
注意:我打算将这个类设为template,char 只是为了即时试用。
【问题讨论】:
-
如果您的编译器支持任何 C++11,请使用
std::unique_ptr<Node>来保存您的Nodes 和代表所有权转移的函数参数,并在需要时随意使用std::move转让所有权,并在您为其分配new Node时为reset。
标签: c++ binary-tree