【发布时间】:2022-01-05 11:46:55
【问题描述】:
所以我有一个程序,需要以坐标 x 和 y 的形式获取节点的位置,具体取决于它在树中的位置,这意味着 x 坐标 0 属于整个树中最左边的节点.例如像这样的树:
5
\
2
/
1
/
4
/
3
坐标应该是:
| node | x | y |
|---|---|---|
| 5 | 0 | 0 |
| 2 | 4 | 1 |
| 1 | 3 | 2 |
| 4 | 2 | 3 |
| 3 | 1 | 4 |
当我的代码得到我时:
| node | x | y |
|---|---|---|
| 5 | 0 | 0 |
| 2 | 3 | 1 |
| 1 | 2 | 2 |
| 4 | 1 | 3 |
| 3 | 0 | 4 |
我的代码:
static class Node {
Integer value;
Node leftNode;
Node rightNode;
Integer x;
Integer y;
Node ( Integer value, Node left, Node right) {
this.value = value;
leftNode = left;
rightNode = right;
this.x = 0;
this.y = 0;
}
}
public static void setCoordinates (Node node, int level, int upperX){
if (node == null) {
return;
}
else {
node.y = level;
node.x = xCordinate(node.leftNode, upperX) ;
System.out.println("x :: " + node.x + " y :: " + node.y + " node ::" + node.value);
setCoordinates(node.leftNode, level + 1, 0);
setCoordinates(node.rightNode, level +1 , node.x);
}
}
public static void setCoordinates (Node root) {
// root is a variable defined in main w
Node n = root;
int lvl = 0;
setCoordinates(n, lvl, 0);
}
public static int xCordinate (Node n , Integer upperX) {
if (n == null){
return 0;
}
else {
int nrOfLeft = xCordinate(n.leftNode,0);
int nrOfRight = xCordinate(n.rightNode,0);
return nrOfLeft + nrOfRight + 1 + upperX;
}
}
有人可以帮我获得正确的 x 坐标吗? y 坐标没有给我带来任何麻烦。 谢谢你的帮助!!
【问题讨论】:
-
你能解释一下
5的坐标是(0,0)吗? x 坐标 0 属于整个树中最左边的节点 -5不是整个树中最左边的节点。 -
是的,因为节点 5 没有任何左儿子,所有其他音符都是该节点的右后代,它应该是最左边的元素
标签: java algorithm data-structures tree