我有一个二叉搜索树,我试图使用get方法返回第n项,但我真的很难弄清楚如何这样做
public A get(int index){
}
正如你所看到的,我正在向方法传递一个int,这将是第n个元素,有人可以指出我正确的方向
答案 0 :(得分:0)
您可以使用队列进行广度优先搜索。这里有一个伪代码:
BreadthFirstSearch(Node root) {
Queue Q;
Node n;
Q.insert(root);
while(Q.isEmpty != true) {
n = Q.extract();
if n->leftSon != null
Q.insert(n->leftSon);
if n->rightSon != null
Q.insert(n->rightSon);
}
}
在您的情况下,您可以修改此代码,并可以创建一个计数器并在do-while的condiction中使用它。例如,你可以这样做:
BreadthFirstSearch(Node root, int nthItem) {
Queue Q;
Node n;
Q.insert(root);
int i=0;
do {
n = Q.extract();
if n->leftSon != null
Q.insert(n->leftSon);
if n->rightSon != null
Q.insert(n->rightSon);
i++;
} while(Q.isEmpty != true && i != nthItem);
return n;
}
在getNthItem(int nthItem)方法中使用此方法。一旦它返回该项目,您就可以处理它。 它不是最好的代码,但只是为了让你有个主意。