这个toRoot
方法应该返回一个列表,其中包含树中参数key
和根之间的所有键。我使用了系统。出来类和junit测试方法中的println
语句。为什么两个打印语句的输出不同?在toRoot
方法中打印的输出是我想要的,但我只在junit测试方法中打印根。我该怎么解决这个问题?
public List<K> toRoot(K key) {
List<K> list=new LinkedList<K>();
int i = key.compareTo(this.key);
if(i == 0){
list.add(this.key);
}
else if(i < 0){
left.toRoot(key);
list.add(this.key);
}
else if(i > 0){
right.toRoot(key);
list.add(this.key);
}
System.out.print(list); //prints "i o n p s z i"...these are the desired
//outputs of the two assertEquals combined together
return list;
}
JUnit测试
@Test public void testToRoot() {
Tree<Character, Integer> tree = tree1();
System.out.print(tree.toRoot('o')); //prints 'i'
assertEquals("i", tree.toRoot('i'));
assertEquals("o n p s z i", tree.toRoot('o'));
}
private static Tree<Character, Integer> tree1() {
Tree<Character, Integer> tree = EmptyTree.getInstance();
tree= tree.add('i', 1);
tree= tree.add('z', 2);
tree= tree.add('e', 3);
tree= tree.add('s', 4);
tree= tree.add('p', 5);
tree= tree.add('n', 6);
tree= tree.add('b', 7);
tree= tree.add('h', 8);
tree= tree.add('o', 9);
tree= tree.add('f', 10);
return tree;
}
其他详细信息:树类是NotEmptyTree
类实现的接口,包括一个覆盖的toRoot
。
public NonEmptyTree<K, V> add(K key, V value);
这里是在NotemptyTree
类中被覆盖的add方法
public NotEmptyTree<K, V> add(K key, V value) {
if(key.compareTo(this.key) == 0){
this.value = value;
}else if(key.compareTo(this.key) < 0){
left = left.add(key, value);
}else{
right = right.add(key, value);
}
return this;
}
字母表前面的字母比后面的字母小。在这种情况下,'i'
是'e'
和'z'
的父节点。'z'
有一个's'
的左子节点,它有'的左子节点p'
,它有'n'
的左子级,它有'o'
的右子级。'e'
有'b'
的左子级,它有'h'<的右子级。/code>。
您的toRoot
方法可能正在向系统打印字符串。out
,但它不返回字符串
。相反,它返回一个列表
。因此,您的断言总是错误的,因为字符串
不等于列表
。
如果您想与String
进行比较,那么您需要编写一个函数来转换List
另一种选择是使用Hamcrest风格的匹配器,如
包含
:
assertThat(tree.toRoot(), contains('o', 'n', 'p', 's', 'z', 'i'));
请注意,尽管有名称,
包含
进行顺序检查,因此即使键出现故障,该测试也会失败,这将使您之前进行的assertEquals
检查具有相同的行为。
我有一个<code>BinarySearchTree</code>,里面有Instance bankaccount的对象,这是我创建的一个类,所以基本上它只是一个二进制搜索树,我编写了一个方法,它将获取树并对其进行平衡,因为某些原因,它在平衡之前准确地打印出树: 现在,首先我有方法,它接受一个列表和一个并通过按顺序检查树数据来创建树数据的,因此它是一个排序数组。然后使用另一种方法以平衡的方式创建树
我有TreeNode类——非二叉树(
我创造了这个二叉查找树。我使用循环和递归编写了两种形式的插入方法。递归代码虽然看起来是正确的,但并不工作,我想不出问题是什么。当我使用insertRecursion方法创建树时,leftChild和rightChild总是为null。 }
我正在努力解决一个问题二叉树的最大深度-LeetCode 这个问题是在leetcode教程中作为尾递归练习给出的。尾递归-LeetCode 给定一棵二叉树,求其最大深度。 最大深度是从根节点到最远叶节点的最长路径上的节点数。 注意:叶子是没有子节点的节点。 例子: 给定二叉树, 返回其深度=3。 一种标准的解决方案,从级别的定义来看待问题 然而,它不是尾部递归 尾递归是递归,其中递归调用是递归函数
我试图递归地在二叉树中找到最小值(不是二叉查找树)。让我困惑的是基本情况。如果TreeNode t为空,返回什么?因为我将使用返回的值将其与当前的最小值进行比较(我认为),我相信我返回的内容很重要。
我坚持使用递归函数来查找二叉树中节点的深度,更具体地说,是在else条件中: 如果树是二叉搜索树,知道左子值总是低于父值,右子值总是高于父值,我可以添加一个If条件,这样如果节点x值低于根,我总是返回根- 当查看函数时,假设节点总是存在的,节点x永远不是根,并且在开始时传递的深度总是0。 如果树是二叉搜索: