我必须实现此文件中描绘的二叉树
连同类 Diagramm 和二叉树用于定位。
所以按照文本和图片,我必须为这个二叉树实现一个构造函数,一个获取和插入方法。
public class BinaryTree {
private Node root = null;
private static class Node {
private Integer key;
private String value;
private Node left = null;
private Node right = null;
public Node(Integer key, String value) {
this.key = key;
this.value = value;
}
}
public boolean insert(Integer key, String value) {
if (root == null) {
root = new Node(key, value);
return true;
} else {
return insert(root, key, value);
}
}
private boolean insert(Node node, Integer key, String value) {
if (key.equals(node.key)) {
// duplicate
return false;
} else if (key < node.key) {
if (node.left == null) {
node.left = new Node(key, value);
return true;
} else {
return insert(node.left, key, value);
}
} else if (key > node.key) {
if (node.right == null) {
node.right = new Node(key, value);
return true;
} else {
return insert(node.right, key, value);
}
}
return false;
}
// not tested, crass assumptions, public domain
public String get(Integer key) {
return get(root, key); // start search from the root.
}
public String get(Node node, Integer key) {
String result = null; // Assume key is not found
if (node.key.equals(key)) { // Key matches? This is the result.
return node.value;
} else {
if (key < node.key && node.left != null) { // key is lower than
// current node,
// and there is a left
// branch, keep
// search from there.
result = get(node.left, key);
} else if (key > node.key && node.right != null) { // key is greater
// than current
// node,
// and there is
// a left
// branch,
// keep search
// from there.
// The key >
// node.key is
// arguably
// redundant.
result = get(node.right, key);
}
}
return result;
}
如何实现正确的测试主要功能?在顶部,我必须借助 graphviz 可视化二叉树并在节点类中添加一个方法,该方法为点代码创建一个字符串。它如何与 Eclipse 配合使用?
最佳答案
get
方法将从树中的特定节点开始,并检查该节点本身是否符合条件。如果是,则返回该值。如果没有,它将推迟到适当的分支并继续搜索。
// not tested, crass assumptions, public domain
public String get(Integer key) {
return get(root, key); // start search from the root.
}
public String get(Node node, Integer key) {
String result = null; // Assume key is not found
if (node.key.equals(key)) { // Key matches? This is the result.
return node.value;
} else {
if (key < node.key && node.left != null) { // key is lower than current node,
// and there is a left branch, keep
// search from there.
result = get(node.left, key);
} else if (key > node.key && node.right != null) { // key is greater than current node,
// and there is a left branch,
// keep search from there.
// The key > node.key is arguably
// redundant.
result = get(node.right, key);
}
}
return result;
}
关于java - 在 Java 中实现和可视化二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226365/