在从通用树转换的二叉树中找到节点的父亲

Posted

技术标签:

【中文标题】在从通用树转换的二叉树中找到节点的父亲【英文标题】:Finding father of node in Binary Tree converted from General Tree 【发布时间】:2012-12-12 17:03:38 【问题描述】:

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

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

这里是一个节点(我是用非递归方式遍历的,因此是visited和parent属性)

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

这是一个例子:

通用树

  A                   
 /|\       
B C D

GeneralTree 的二叉树版本

  A
 /
B
 \
  C
   \
    D

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

【问题讨论】:

你的树很重男轻女。 【参考方案1】:

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

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

while ((parent != null) && (current != parent.left))

    current = parent;
    parent = current.parent;

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

【讨论】:

谢谢!效果很好(至少当我把它画出来的时候),现在我要实现它

以上是关于在从通用树转换的二叉树中找到节点的父亲的主要内容,如果未能解决你的问题,请参考以下文章