查找从常规树转换的二叉树中节点的父节点

时间:2012-12-12 17:03:38

标签: c++ algorithm tree

我正在使用通用树的二叉树实现,使用通用算法,节点的第一个子是“左”,任何其他兄弟是第一个儿子的“右”。

我想回答的是,给定一个节点p,我怎样才能找到节点p的父亲?

这是一个节点(我使用非递归方式遍历,因此访问和父属性)

struct node {
  std::string name;
  int sons;
  bool visited;
  node * first;
  node * next;
  node * parent;    
};

以下是一个例子:

GeneralTree

  A                   
 /|\       
B C D

GeneralTree的BinaryTree版本

  A
 /
B
 \
  C
   \
    D

所以B,C和D的父节点都是A。

1 个答案:

答案 0 :(得分:3)

只需按照父链接,直到找到空引用 - 如果您以p作为根节点开始,或者您将来自其节点的节点作为其左子节点,则会发生这种情况。

var current = p;
var parent = current.parent;

while ((parent != null) && (current != parent.left))
{
    current = parent;
    parent = current.parent;
}

现在parent包含p中节点的父节点或null,如果p包含根节点。