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

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 包含根节点。

【讨论】:

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

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

第四章第4节 二叉树特殊节点个数统计

.设一棵二叉树的深度为k,则该二叉树中最多有( )个结点.

如何在任何二叉树中找到两个节点的最低共同祖先?

有N个节点的二叉树,其高度为多少

js数据结构可逐次添加叶子的二叉树(非最优二叉树)

如何在任何二叉树中找到两个节点的最低共同祖先?