我花时间在网站上查看了类似的问题和答案并实施了一些,但我仍然卡住了,看来我的问题有点不同和棘手。我面临这样一种情况,即在给定节点作为输入的情况下,我必须确定遵循节点层次结构的最短通信路径。假设我有一棵树:
CEO
|
------------------------------------------
| |
行政总监 财务总监
| |
| -------------------
| | |
经理 1 经理 2 经理 3
|
------------------
| |
主管 1 主管 2
这是我的 JAVA 代码
public class StaffChartTraversal {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Node<String> one = new Node<String>("1","CEO", "");
Node<String> two = new Node<String>("2","Director Admin", "1");
Node<String> three = new Node<String>("3","Director Finance", "1");
Node<String> four = new Node<String>("6","Manager 1", "2");
Node<String> five = new Node<String>("12","Manager 2", "3");
Node<String> six = new Node<String>("15","Manger 3", "3");
Node<String> seven = new Node<String>("16","Supervisor 1", "6");
Node<String> eight = new Node<String>("17","Supervisor 2", "6");
one.setLeft(two);
one.setRight(three);
two.setLeft(four);
three.setLeft(five);
three.setLeft(six);
four.setLeft(seven);
four.setRight(eight);
inorder(seven);
}
private static class Node<T> {
public Node<T> left;
public Node<T> right;
public T data1;
public T data2;
public T data3;
public Node(T data1, T data2, T data3) {
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
}
public Node<T> getLeft() {
return this.left;
}
public void setLeft(Node<T> left) {
this.left = left;
}
public Node<T> getRight() {
return this.right;
}
public void setRight(Node<T> right) {
this.right = right;
}
}
public static void inorder(Node<?> n) {
if (n != null) {
inorder(n.getLeft());
System.out.print(n.data2 + "(" + n.data1 + ")" + " ");
inorder(n.getRight());
}
}
}
现在,当在方法中给定一个节点作为输入时,inorder()
它应该打印遵循层次结构的最短通信路径。所以如果我要输入seven
哪个代表Supervisor 1
比如inorder(seven)
程序应该输出:
Supervisor 1 (16) Manager 1 (6) Director Admin (2) CEO(1)
但是从我的实现中,我得到了这样的输出:
Supervisor 1(16)
请我在修复我的代码时需要帮助...谢谢
编辑:
感谢@nash_ag,我已经修复了上面指出的初始问题,但后来我想扩展 inorder() 方法以接受 2 个参数左右一个父母的孩子所以如果给inorder(five, six)
它应该返回Manager 2 (12) Director Finance (3) Manager 3 (15)
。此外,如果给定inorder(seven, six)
它应该返回Supervisor 1 (16) Manager 1 (6) Director Admin (2) CEO(1) Director Finance (3) Manager 3 (15)
我编辑的 Java 代码是:
public class StaffChartTraversal {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Node<String> zero = null;
Node<String> one = new Node<String>(zero, "1", "CEO", "");
Node<String> two = new Node<String>(one, "2", "Director Admin", "1");
Node<String> three = new Node<String>(one, "3", "Director Finance", "1");
Node<String> four = new Node<String>(two, "6", "Manager 1", "2");
Node<String> five = new Node<String>(three, "12", "Manager 2", "3");
Node<String> six = new Node<String>(three, "15", "Manager 3", "3");
Node<String> seven = new Node<String>(four, "16", "Supervisor 1", "6");
Node<String> eight = new Node<String>(four, "17", "Supervisor 2", "6");
one.setLeft(two);
one.setRight(three);
two.setLeft(four);
three.setLeft(five);
three.setLeft(six);
four.setLeft(seven);
four.setRight(eight);
inorder(four, five);
}
private static class Node<T> {
public Node<T> parent;
public Node<T> left;
public Node<T> right;
public T data1;
public T data2;
public T data3;
public Node(Node<T> parent, T data1, T data2, T data3) {
this.parent = parent;
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
}
public Node<T> getParent() {
return this.parent;
}
public Node<T> getLeft() {
return this.left;
}
public void setLeft(Node<T> left) {
this.left = left;
}
public Node<T> getRight() {
return this.right;
}
public void setRight(Node<T> right) {
this.right = right;
}
}
public static void inorder(Node<?> n, Node<?> m) {
if ((n != null) && (m != null)) {
System.out.print(n.data2 + "(" + n.data1 + ") ");
if (n.getParent().equals(m.getParent())) {
inorder(n.getParent(), null);
} else {
inorder(n.getParent(), m.getParent());
}
System.out.print(" " +m.data2 + "(" + m.data1 + ")");
}
}
}
它适用于inorder(seven, six)
但inorder(five, six)
它返回Manager 2 (12) <With no common ancestor> Manager 3 (15)
而不是Manager 2 (12) Director Finance (3) Manager 3 (15)
请大家帮帮我