我有一棵从一般树转换而来的二叉树。 意思是,任何给定节点的左边节点都是该节点的子节点,任何给定节点的右边节点都是该节点的兄弟节点。
我的问题是 - 我如何编写一个方法来获取节点并找到它的父节点? (通过遍历整个树)
谢谢!
答案 0 :(得分:0)
让我看看我是否理解正确
这取决于你的树的实现。通常树没有任何循环,每个节点都有一个对子的引用。但同样,这就是树的实施方式。
如果要查找leaf,可以继续递归到节点的子节点,直到它到达child等于null的基本情况。
findLeaves (Node n) {
if (n == null)
return;
else if (n.left == null AND n.right == null)
return n; // A child
else
findLeaves(n.left);
findLeaves(n.right);
}
与root相同。如果节点引用了父节点,我们正在寻找根节点。继续递归父项,直到父项为空,这意味着该节点是父项。
findRoot (Node n) {
if (n == null)
return;
else if (n.parent == null)
return n; // A root
else
findRoot(n.parent);
}
我希望有帮助
答案 1 :(得分:0)
这会对你有所帮助
private static BinaryNode getParent(AnyType x, BinaryNode<AnyType> t, BinaryNode<AnyType> parent) {
if (t == null) {
return null;
} else {
if (x.compareTo(t.element) < 0) {
return getParent(x, t.left, t);
} else if (x.compareTo(t.element) > 0) {
return getParent(x, t.right, t);
} else {
return parent;
}
}
}
答案 2 :(得分:0)
如果您的节点类包含&#39; value&#39;整数变量。 sudo-code可以写成像这样的东西
Node find_parent(Node currentNode, Node parentNode, int valueOfChildNode) {
Node finalNode = null;
if ( currentNode->value == valueOfChildNode ) return parentNode;
if ( currentNode->left_child)
finalNode = find_parent(currentNode->left_child,valueOfChildNode,currentNode);
if ( !finalNode && currentNode->right_child )
find_parent(currentNode->right_child,valueOfChildNode,currentNode);
return finalNode;
}
您可以根据自己的要求进行更改。你可以按照下面给出的例子来调用它。
find_parent( binaryTree->root_node, null, 15);