在从通用树转换的二叉树中找到节点的父亲
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
包含p
或null
中节点的父节点,如果p
包含根节点。
【讨论】:
谢谢!效果很好(至少当我把它画出来的时候),现在我要实现它以上是关于在从通用树转换的二叉树中找到节点的父亲的主要内容,如果未能解决你的问题,请参考以下文章