void BinarySearchTree::insert(int d)
{
tree_node* t = new tree_node;
tree_node* parent;
t->data = d;
t->left = NULL;
t->right = NULL;
parent = NULL;
// is this a new tree?
if(isEmpty()) root = t;
else
{
//Note: ALL insertions are as leaf nodes
tree_node* curr;
curr = root;
// Find the Node's parent
while(curr)
{
parent = curr;
if(t->data > curr->data) curr = curr->right;
else curr = curr->left;
}
if(t->data < parent->data)
parent->left = t;
else
parent->right = t;
}
}
问题:
为什么我需要为 tree_node * t分配内存; 使用new而不是 tree_node * parent; ?
究竟什么是tree_node *它在内存中的样子是什么?它有什么作用?
有人可以向我解释 - &gt;运算符及其工作原理?
答案 0 :(得分:4)
为什么我需要为tree_node * t分配内存;使用new但不是tree_node * parent;?
你没有需要,但它是逻辑的一部分。 t
表示您要插入的新节点,因此您需要先创建它(由new
完成)。您没有为parent
分配内存,因为它将引用已存在的节点:
while(curr)
{
parent = curr;
//...
究竟什么是tree_node *它在内存中的样子是什么?它是做什么用的?
没办法告诉(它应该在某处定义),但它可能是这样的结构:
struct tree_node
{
tree_node* left;
tree_node* right;
int data;
}
有人可以向我解释 - &gt;运算符及其工作原理?
用于通过指针访问对象成员。如果您有Class* x
,则x->a
相当于(*x).a
。