我正在使用通用树的二叉树实现,使用通用算法,节点的第一个子是“左”,任何其他兄弟是第一个儿子的“右”。
我想回答的是,给定一个节点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。
答案 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
包含根节点。