如何添加/组合此二进制树:
import java.util.Scanner;
public class BinaryTreeTest {
public static void main(String[] args) {
new BinaryTreeTest().run();
}
// Node Class
static class Node {
Node left;
Node right;
int value;
public Node(int value) {
this.value = value;
}
}
public void run() {
// build simple tree
Node root = new Node(5);
System.out.println("Binary Tree Example");
System.out.println("Building tree with root value of ID " + root.value);
insert(root, 1);
insert(root, 8);
insert(root, 6);
insert(root, 3);
insert(root, 9);
System.out.println("Traversing tree in order");
printInOrder(root);
System.out.println("Traversing tree front-to-back from location 7");
printFrontToBack(root, 7);
}
public void insert(Node node, int value) {
if (value < node.value) {
if (node.left != null) {
insert(node.left, value);
} else {
System.out.println(" Inserted " + value + " to left of "
+ node.value);
node.left = new Node(value);
}
} else if (value > node.value) {
if (node.right != null) {
insert(node.right, value);
} else {
System.out.println(" Inserted " + value + " to right of "
+ node.value);
node.right = new Node(value);
}
}
}
public void printInOrder(Node node) {
if (node != null) {
printInOrder(node.left);
System.out.println(" Traversed " + node.value);
printInOrder(node.right);
}
}
/**
* uses in-order traversal when the origin is less than the node's value
*
* uses reverse-order traversal when the origin is greater than the node's
* order
*/
public void printFrontToBack(Node node, int id) {
if (node == null)
return;
if (node.value > id) {
// print in order
printFrontToBack(node.left, id);
System.out.println(" Traversed " + node.value);
printFrontToBack(node.right, id);
} else if (node.value < id) {
// print reverse order
printFrontToBack(node.right, id);
System.out.println(" Traversed " + node.value);
printFrontToBack(node.left, id);
} else {
// order doesn't matter
printFrontToBack(node.left, id);
printFrontToBack(node.right, id);
}
}
}
有了这段代码,我就可以在创建的二进制树中插入Person
实例:
import java.util.Scanner;
class clubmember {
public static void main(String[] args) {
int id;
String fname, lname;
Scanner input = new Scanner(System.in);
System.out.println("ID>");
id = input.nextInt();
System.out.println("Fname >");
fname = input.next();
System.out.println("lname >");
lname = input.next();
Person object1 = new Person(id, fname, lname);
System.out.println(object1);
}
}
public class Person {
private final int id;
private final String firstName;
private final String lastName;
public Person(int id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public int getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
@Override
public String toString() {
return String.valueOf(id) + ": " + firstName + " " + lastName;
}
}
这是一个糟糕的抽象-难怪你在合并它时遇到困难。我建议在某个地方使用BinaryTree类,最好是使用泛型的类:
public class BinaryTree<T> {
// What methods do all BinaryTrees need?
}
与现有数据结构相比,您将更容易集成此数据结构。
也许这可以让你开始。
一般情况下创建二叉树
创建一个名为BinaryTree
的类会更容易,也会创建更干净的代码,它将是这样的):
class Node
{
Node left, right;
Person value;
public Node(Person val) {
value = val;
}
}
public class BinaryTree {
Node head;
public BinaryTree() {
head = null;
}
public void insert(Person data) {
Node tmp = new Node(data);
if (head == null) head = tmp;
else
// do comparisons with head to decide where to add the new node
head->left = new Node(data);
// or head->right = new Node(data);
}
public void traverse() {
// could be similar to your printInOrder method
}
}
然后你可以做:
... main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.insert(new Person(...));
tree.insert(new Person(...));
tree.traverse();
}
使您的代码在不做太多更改的情况下工作
这是关于如何在已经创建的代码中"工作"的更多内容。
如果您想在二叉树中插入Person
实例,首先您应该更改:
// Node Class
static class Node {
Node left, right;
int value;
public Node(int value) {
this.value = value;
}
}
不采用int
值,而是采用Person
实例,如下所示:
// Node Class
static class Node {
Node left, right;
Person per;
public Node(Person per) {
this.per = per;
}
}
您还应该更改insert
方法以获取Person
实例,而不是int
值。并将比较(value < node.value)
更改为比较Person
实例,可能是通过它们的lastName
或id
。
然后在你的clubmember
main
代码中,你可以做:
public static void main(String[] args) {
BinaryTreeTest foo;
Person per1 = new Person(...);
BinaryTreeTest.Node nod1 = new BinaryTreeTest.Node(per1);
Person per2 = new Person(...);
foo.insert(nod1, per2);