根据Recursive search for a node in non-binary tree,我知道如何实现递归搜索但是如何获得此节点的深度呢?
我想我应该为每次递归添加一个计数器,但我不知道应该在哪里添加这个计数器......
谢谢
答案 0 :(得分:1)
以下是带注释的部分代码:
public class Tree
{
private Node root;
public int findDepth(int searchNodeValue) {
List<Node> nodesAtCurrentLevel = Collections.singletonList(root);
return recursiveSearch(0, searchNodeValue, nodesAtCurrentLevel);
}
public int recursiveSearch(int level, int searchNodeValue, List<Node> nodesAtCurrentLevel) {
List<Node> nodesAtNextLevel = new ArrayList<Node>();
// Check if searchNode matches any node at current level
for (Node node : nodesAtCurrentLevel) {
// If it matches, we have found the node, return current level
if (node.getValue() == searchNodeValue) {
return level;
}
// Add children of all nodes at current level in nodesAtNextLevel
if (node.hasChildren()) {
nodesAtNextLevel.addAll(node.getChildren());
}
}
// searchNode is not found at current level, increment level and continue search at next level if next level exists in tree
if (!nodesAtNextLevel.isEmpty()) {
return recursiveSearch(level + 1, searchNodeValue, nodesAtNextLevel);
}
// We have traversed entire tree. Node not found. Return -1
return -1;
}
}
class Node
{
private int value;
private List<Node> children = new ArrayList<Node>();
public Node(int value) {
this.value = value;
}
public boolean hasChildren() {
return children.isEmpty();
}
public int getValue() {
return value;
}
public List<Node> getChildren() {
return children;
}
}
答案 1 :(得分:0)
已编辑
- 让递归函数获得输入级别。从0 / -1开始。归还一个物体;对象具有节点和级别。递归函数的每次传递都会递增传入的级别并在返回对象中设置它。
- 将级别传递给递归函数。以0 / -1开始。维护一个全局变量(或一个非函数定义的变量,以便在函数的每次迭代中访问相同的变量;即变量不在堆栈上但在堆上。我希望这个事情很简单。 Java并且不需要进一步解释)。在递归函数开始时将其设置为(1 +传递级别)。这不是线程安全的。
//原始答案有想法在级别中作为引用传递并在递归函数内递增它。显然在Java中这很乏味。