【发布时间】:2012-02-01 20:25:52
【问题描述】:
我正在为求职面试而学习并正在审查树木,我在遍历它们时没有问题,但我遇到了一个我无法找到正确答案的问题:
编写一个函数,在给定两个参数的情况下返回树中的一个节点: 指向根节点的指针和节点的中序遍历数 我们想回来。树中存储的唯一信息是 每个节点的子节点数。
到目前为止,我什至无法弄清楚为什么我会关心存储在树中的信息(孩子的数量)。除此之外,如果我们假设有一棵像这样的树:
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);
}
}
我知道这会遍历树,但它仍然不能完全满足我的要求。任何帮助将不胜感激。
【问题讨论】:
-
鉴于“存储在树中的唯一信息是每个节点的子节点数”,我猜你的示例树是错误的。另外,“中序遍历数”究竟是什么?
-
"编写一个函数,返回树中的一个节点给定两个参数",树中的一个节点,哪个节点?具有该特定值的节点或在该特定索引处的节点(索引为中序遍历)???
标签: java binary-tree tree-traversal