gpt4 book ai didi

java二叉搜索树查找父节点

转载 作者:行者123 更新时间:2023-12-01 17:25:34 26 4
gpt4 key购买 nike

我正在研究一种找到阳极父级的方法。我从根开始,然后沿着叶子向下走,只要它们不为空且不是子节点。

下面是我的代码,它有点困惑,因为我试图测试它看看出了什么问题。

我拥有的树是

        10
/ \
2 20
\ / \
3 18 22
/
21

传入的 x 是 20,所以 10 是父级,但是当我运行它时,22 作为父级出现。 while循环似乎不起作用,是我写的方式吗?

public Node<E> findParent(E x)
{
Node<E> node = root;

System.out.println("node is " + node.getData() + " before the search");
System.out.println("The value of x is " + x);
System.out.println("The value of node.getRight is " + node.getRight().getData());
boolean test = !node.getRight().getData().equals(x);
System.out.println("does nodes data equal x " + test);
while(((node!=null) && (node.getLeft()!=null) && (!node.getLeft().getData().equals(x))) ||
((node != null) && (node.getRight()!=null) && (!node.getRight().getData().equals(x))))
{ System.out.println("why didnt it stop");
if(x.compareTo(node.getData()) < 0)
{
node = node.getLeft();
}
else
{
node = node.getRight();
}
}
System.out.println("node is " + node.getData() + " after the search");
return node;
}

最佳答案

我会采用不同的方式:在传递当前节点和当前父节点的辅助方法中进行递归。它使一切变得更加简单:

public Node<E> findParent(E x) {
return findParent(x, root, null);
}

public Node<E> findParent(E x, Node<E> node, Node<E> parent)
{
if (node == null) {
return null;
} else if (!node.getData().equals(x)) {
parent = findParent(x, node.getLeft(), node);
if (parent == null) {
parent = findParent(x, node.getRight(), node);
}
}
return parent;
}

关于java二叉搜索树查找父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com