- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试用 Java 编写二叉搜索树。我的 BST 采用许多“关键字”并使用大多数递归方法将它们插入到树中。
不幸的是,它似乎在向后添加它们,E.x.右侧是比左侧 (x-z...) 更高的字母 (a-c...)。
我不知道如何正确地反转逻辑。
这是我的插入代码:
/**
* This method creates a new record for theFileData.
* This is a recursive insertion method, that adds recordToAdd to the list of records
* for the node associated with theKeyword.
*
* If there is no keyword, create a new Node for it.
*
* @param theKeyword keyword to associate with new record.
* @param theFileData file data to associate with new record.
*/
public void insert(String theKeyword, FileData fd) {
if (fd == null) {
throw new NullPointerException("Invalid file data.");
}
if (theKeyword == null) {
throw new NullPointerException("Invalid keyword.");
}
theKeyword = theKeyword.toLowerCase();
Record recordToAdd = new Record(fd.id, fd.author, fd.title, null);
// step one is to find the node with keyword theKeyword. That will give us the correct list to insert into.
if (root == null) {
/*
* If the tree is currently empty, we create a new node as root.
* This node than has the record added to it's records list.
*/
Node newNode = new Node(theKeyword);
newNode.update(recordToAdd);
root = newNode;
} else if (!contains(theKeyword)) {
Node newNode = new Node(theKeyword);
newNode.update(recordToAdd);
insert(root, newNode);
} else {
Node target = find(theKeyword, root);
target.update(recordToAdd);
}
}
/**
* This recursive insertion helper method allows us to quickly and easily add a new Node object
* to our BST.
*/
private Node insert(Node theParent, Node theNode) {
if (theParent == null) {
return theNode;
} else if (theNode.keyword.compareTo(theParent.keyword) < 0) {
theParent.right = insert(theParent.right, theNode);
} else if (theNode.keyword.compareTo(theParent.keyword) > 0) {
theParent.left = insert(theParent.left, theNode);
}
return theParent;
}
/**
* This helper method searches for a given keyword, returning the node when found.
*
* @return Node containing the keyword you are looking for. Else null.
*/
private Node find(String keyword, Node root) {
if (keyword == null) {
throw new IllegalArgumentException("Invalid keyword.");
}
if (root == null) {
return null;
}
keyword = keyword.toLowerCase();
if (keyword.compareTo(root.keyword) > 0) {
return find(keyword, root.left);
}
if (keyword.compareTo(root.keyword) < 0) {
return find(keyword, root.right);
}
return root;
}
/**
* This method simply calls the find helper method. If find returns null, we know the value does not exist.
*
* @param keyword keyword to search for.
* @return true or false depending on if the keyword exists in the BST.
*/
public boolean contains(String keyword) {
keyword = keyword.toLowerCase();
if (find(keyword, root) != null) {
return true; // if the keyword exists.
}
return false;
}
强文本
这是树的图形表示:
| | |-------- Blob
| |--------建筑物
| | | |--------因果关系
| | | | |--------分类规则
| | |--------聚类
|-------基于内容
| |--------数据挖掘
数据库
| | |------距离测量
| | | |------图像显示
| |--------图像管理
|--------图像检索
| | | |------图像堆栈
| | | | | |------索引
| | | | | | | |------信息检索
| | | | | | |--------基于实例
| | | | | | | |--------基于实例
| | | | |--------知识
| | |------行
| |--------匹配
| | | | | |--------多媒体
| | | | | | |--------神经网络
| | | | |------姿势
| | | |--------修剪
| | | | |------查询
| | |--------实例查询
| | | | |--------查询树
| | | |--------识别
| | | | | |------基于区域
| | | | | | |------关系型
| | | | |------搜索
| | | | | |------相似度
| | | | | | | |------空间
| | | | | | | | |--------时间
| | | | | | | | | |------时间相关
| | | | | | |--------三角不等式
| | | | | | | |------加权
Blob 应该在左边,匹配应该在右边,等等。
最佳答案
在您的代码中,反转 < 和 >。以便代码读取
private Node insert(Node theParent, Node theNode) {
if (theParent == null) {
return theNode;
} else if (theNode.keyword.compareTo(theParent.keyword) > 0) {
theParent.right = insert(theParent.right, theNode);
} else if (theNode.keyword.compareTo(theParent.keyword) < 0) {
theParent.left = insert(theParent.left, theNode);
}
return theParent;
}
关于algorithm - 如何反转(镜像)递归二叉搜索树的子树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31390713/
我正在尝试将我在本文档中阅读的内容付诸实践: https://sar.informatik.hu-berlin.de/research/publications/SAR-PR-2006-05/SAR-
我一直在尝试编写一个可以改变这个的 terraform 表达式: subnets = { my_subnet_1 = { nsg = "my_nsg_1", ad
我有一个HashMap,它将两个字符串转换为单词,然后将单词添加到 map 中。我拥有它,以便一个键可以指向多个值。现在我想创建一个循环来反转表,以便所有值都指向键。不要为一个指向多个逆值的键而烦恼。
我对 ~ 运算符有点困惑。代码如下: a = 1 ~a #-2 b = 15 ~b #-16 ~ 是如何工作的? 我想,~a 会是这样的: 0001 = a 1110 = ~a 为什么不呢? 最佳
如果执行 ResourceManager.GetString(Key),您可以获取资源中某个项目的值。有没有一种方法可以进行反向查找以从给定值的资源中获取 key (本质上是反翻译)? 最佳答案 您应
我在 R 中编写了一个代码来反转一个数字。但是我得到了 inf作为输出。 digit0){ rev_num=rev_num*10 + digit %% 10 digit=digit / 10 }
这个问题已经有答案了: Invert keys and values of the original dictionary (3 个回答) 已关闭 9 年前。 我正在寻找在 python 上转置一本字
所以我试图反转我当前制作的形状的输出。我想知道我应该扭转这种情况吗?我尝试更改变量“a”和“c”的值,最终陷入无限循环。 class IRT { public static void main
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: PHP mysql_real_escape_string() -> stripslashes() leavi
从 Wordpress 模板中提取一些预先存在的代码来绘制椭圆阴影。阴影呈椭圆形向下辐射。只有椭圆的下半部分可见,从而形成底部阴影效果。 我只是想“反转”椭圆的“阴影效果”,以便只有阴影的顶部 一半可
我有一个函数应该找到两个弧度的中间 function mrad(rb,ra){return (rb+ra)/2;} 但有时,当我用 Math.sin 和 Math.cos 绘制 x 和 y 时,这两个
给定此代码(http://jsfiddle.net/bzf1mkx5/) .intern { -webkit-animation: in 1s 1 reverse forwards; } .i
我对 ~ 运算符有点困惑。代码如下: a = 1 ~a #-2 b = 15 ~b #-16 ~ 是如何工作的? 我想,~a 会是这样的: 0001 = a 1110 = ~a 为什么不呢? 最佳
我需要以相反的顺序从列表中提取项目(从最后一个条目到第一个)。我设法得到了所有元素,但是,从第一个到最后一个。这是我正在使用的部分代码: 该列表位于不同的网站集上。 using (SPSit
由于一些证书问题,我不得不写 ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chai
是否有一个函数接受一个函数列表和一个输入,并输出一个对输入进行操作的函数列表? 所以像 map,但倒退: >>>map(lambda x: 2*x,[1,2,3,4,5,6,7,8,9]) [2, 4
考虑下表团队消息: 15:10 | Peter | I'm off to the store, call my mobile phone if you need me. 15:11 | Susy |
算法如下: int encryption(int a, int b) { short int c, c2; uint8_t d; c = a ^ b; c2 = c;
我正在寻找一种方法来逆转 a CRC32 checksum .周围有解决方案,但它们要么是 badly written , extremely technical和/或 in Assembly .汇编
使用批处理文件,处理所有在文件名或扩展名中共享字符串的文件就足够简单了,例如: FOR /R %F IN (*.EXE) DO @ECHO %F 但是,如果我想反转文件集的含义怎么办?比如,处理所有不
我是一名优秀的程序员,十分优秀!