我完全坚持这个问题。我需要在顺序列表中输出值的位置(第一个索引0)。需要注意的是,我无法创建列表并对其进行搜索。对于每个节点,我有一个变量,其中包含有关任何给定树(包括根)中有多少节点的信息。我有大约50%的案例工作,但其余的都难以理解......如果价值不存在,我需要将指数返回原处。
在班级树
中public int position(int val) {
if (this.isEmpty()){
return 0;
}
if (val == root.key){
return (root.subNodes - root.rightchild.subNodes) - 1;
}
if (val < root.key){
return root.position(0,root.subNodes - 1,val,root);
} else {
return (root.subNodes - root.rightchild.subNodes) +root.position(0,root.subNodes - 1,val,root.rightchild);
}
}
在班级节点
中int position(int min, int max, int k, Node n){
if (k == n.key){
if (n.rightchild != null){
return n.subNodes - (n.rightchild.subNodes);
}
return max;
}
if (n.rightchild == null && n.leftchild == null){
return 1;
}
if (k < n.key){
return position(min ,n.leftchild.subNodes - 1, k, n.leftchild);
}
if (k > n.key && n.rightchild != null){
return position(n.subNodes - (n.rightchild.subNodes + 1), n.subNodes - 1, k, n.rightchild);
}
return max;
}
答案 0 :(得分:0)
理念:
您可以按顺序遍历树,并跟踪您访问过的节点数。这需要某种计数器,可能还有辅助方法。
当我们找到一个值大于或等于所需值的节点时,我们停止搜索。这是因为我们要么找到所需值的索引,要么找到所需值的索引(所需的值不会在任何更早或更晚的索引中)。如果我们从未找到等于或大于所需值的节点,则所需的值将位于树的末尾,其位置等于节点数。
实施:
想象一下,你有这个节点
public class Node {
int value;
Node leftChild;
Node rightChild;
// Getters and Setters
}
这棵树
public class Tree {
Node root;
// Getters and Setters
}
树内
public int position(int val) {
positionHelper(val, root, 0);
}
public int positionHelper(int val, Node currentNode, int steps) {
// In-order search checks left node, then current node, then right node
if(currentNode.getLeftChild() != null) {
steps = positionHelper(val, currentNode.getLeftChild(), steps++);
}
// We found the node or have already moved over the node, return current steps
if(currentNode.getValue() >= val) {
return steps;
}
// Next Node Index
steps++;
if(currentNode.getRightChild() != null) {
steps = positionHelper(val, currentNode.getRightChild(), steps++);
}
return steps;
}
如果有任何问题或有任何问题,请告诉我