这是家庭作业。不要只发布代码。
我需要在二进制搜索树中找到给定数据点的深度。我实现了一个<code>depth()</code>方法和一个helper方法<code>countNodes()</code>,它递归地对节点进行计数。
如果我们要搜索的数据不在树中,我需要返回< code>-1。根据我的递归,我看不出这怎么可能。
@Override
public int depth(T data) {
if (data == null) {
throw new IllegalArgumentException("Data is null");
}
//FIXME don't use the contains() method
return countNodes(root, data);
}
/**
* Helper method counts teh nodes
* @param node the node we're going to start counting at
* @param data that we're looking for
* @return the sum of the number of children nodes
*/
private int countNodes(BSTNode<T> node, T data) {
if (node == null) {
return 0;
}
if (compare(data, node.getData()) == 0) {
return 1;
} else if (compare(data, node.getData()) < 0) {
return 1 + countNodes(node.getLeft(), data);
} else if (compare(data, node.getData()) > 0) {
return 1 + countNodes(node.getRight(), data);
} else {
return -1;
}
}
在这种情况下,一般的想法是将“未找到”状态(在本例中为-1
)带到递归树中。您可以通过检查递归调用是否返回了-1
-如果是,则返回-1
直到调用堆栈的顶部,如果不是,则继续正常操作。
我希望在BST中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。 查找父级的想法是这样的: 1)如果值(key)不存在,则返回无,无 2)如果根等于值(key),则返回无,根 3)否则查找值(key)并返回(par, node),其中par是父级和节点 我的函数是这样的: 当 为“无”时,如何处理该问题?
我坚持使用递归函数来查找二叉树中节点的深度,更具体地说,是在else条件中: 如果树是二叉搜索树,知道左子值总是低于父值,右子值总是高于父值,我可以添加一个If条件,这样如果节点x值低于根,我总是返回根- 当查看函数时,假设节点总是存在的,节点x永远不是根,并且在开始时传递的深度总是0。 如果树是二叉搜索:
我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。
这是我的代码: 首先,我从一个列表中做一个二叉查找树,并检查它是否是一个二叉查找树。 给定列表的第一个元素是根节点,后续元素成为子节点。到叶节点。 例如,调用 的结果为: 结果是二叉搜索树,因为左子节点小于父节点,右子节点大于父节点。因此,调用<code>bst_child</code>的结果是<code>True</code>。 然后我添加了寻找二叉查找树深度的代码。通过对第一个列表排序,我制作
主要内容:src/runoob/binary/BinarySearchTreeSearch.java 文件代码:二分搜索树没有下标, 所以针对二分搜索树的查找操作, 这里定义一个 contain 方法, 判断二分搜索树是否包含某个元素, 返回一个布尔型变量, 这个查找的操作一样是一个递归的过程, 具体代码实现如下: ... // 查看以node为根的二分搜索树中是否包含键值为key的节点, 使用递归算法 private boolean contain (Node node, Key key )
我试图打印我的二叉搜索树的每个节点的所有值和深度。我很难想出一种递归计算深度的方法。到目前为止,我有一种仅打印树的每个值的方法。我将不胜感激一些指导,因为我觉得我让它变得比应有的更难。