我正在为工作面试而学习并正在审查树木,遍历它们时我没有问题,但我遇到了一个我无法找到正确答案的问题:
编写一个函数,给定两个参数,返回树中的一个节点:指向根节点的指针和我们要返回的节点的中序遍历数。树中存储的唯一信息是每个节点的子节点数。
到目前为止,我什至无法弄清楚为什么我会关心存储在树中的信息(孩子的数量)。除此之外,如果我们假设有一棵像这样的树:
5
4 7
3 1 4
那么中序遍历将是341547
,但我无法弄清楚返回我想要的节点的代码(为了论证,我假设中序遍历数为 2 - 这意味着我想要值为 1 的节点)。
我尝试进行递归遍历,但最终搞砸了我拥有的内部计数器,因此我尝试了一种不同的方法,只是尝试将所有内容都放在堆栈上,但我不知道如何正确地这样做。到目前为止,我有:
public int findNode(root, position){
Stack<Integer> s = new Stack<Integer>();
cNode = root; //cNode = current Node
while(cNode.left != null)
cNode = cNode.left;
s.push(cNode);
while(cNode.right != null)
cNode = cNode.right;
//stuck here.
}
递归方法更容易,但我不知道如何检查我是否有我正在寻找的#:
public int findNode(root, position){
cNode = root;
if(cNode != null){
findNode(cNode.left, position);
System.out.print(cNode.data);
findNode(cNode.right, position);
}
}
我知道这会遍历树,但它仍然不能完全满足我的要求。任何帮助,将不胜感激。