需要帮助理解二叉搜索树中的父节点

时间:2014-12-13 03:28:07

标签: c parent nodes binary-search-tree

以下代码是一个将节点插入树中正确位置的函数。我不明白的是父节点实际代表的是什么。当它说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;
}

1 个答案:

答案 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.