以下代码是一个将节点插入树中正确位置的函数。我不明白的是父节点实际代表的是什么。当它说root -> left -> parent = root -> left
时,它是什么意思?是不是设置了根的左侧父母本身?
不应该是root -> left -> parent = root
而是因为我们希望root的孩子的父母是root用户而不是左子女本身?能否为我澄清一下父节点,谢谢。
Node * insert(Node *root, int item) {
if (root == NULL)
return newNode(item);
if (item <= root -> info)
if (root -> left == NULL) {
root -> left = newNode(item);
root -> left -> parent = root -> left; //**line of interest**
}
else
insert(root -> left, item);
else
if (root -> right == NULL) {
root -> right = newNode(item);
root -> right -> parent = root -> right;
}
else
insert(root -> right, item);
return root;
}
答案 0 :(得分:1)
根据你的描述,我认为节点类将是,
class node{
int info;
node *left;
node *right;
node *parent;
};
现在在BST中将有一个根节点,其中父节点将为NULL。假设我们插入第一个值。(让它为5)
现在root显然有5个。 root->left
为空,root->right
为空。
如果你现在插入2,那么2将位于根的左侧。
所以root-&gt; left将是2.现在让我们简化一下,因为root->left
我们指的是一个节点,而不是一个值。
因此root->left->info = 2;
。
现在还有一件事要做。我们设置root->left
的值。现在root->left
的父母是什么?那将是root,
所以root->left->parent = root;
现在,如果您插入另一个数据(让它为1),那么
root->left->left->info = 1;
root->left->left->parent = root->left;
所以你的代码没有简化在BST中插入节点的事情。
我会做的是,
Node n = new node();
n = newNode(item); //as you wrote
n->parent = root->left.