Java - 在二叉树中查找节点的父节点? (从一般树转换而来)

时间:2014-10-16 04:26:15

标签: java traversal

我有一棵从一般树转换而来的二叉树。 意思是,任何给定节点的左边节点都是该节点的子节点,任何给定节点的右边节点都是该节点的兄弟节点。

我的问题是 - 我如何编写一个方法来获取节点并找到它的父节点? (通过遍历整个树)

谢谢!

3 个答案:

答案 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);