【发布时间】:2015-02-20 03:37:47
【问题描述】:
我正在编写一个递归调用来查看两个节点 (n & m) 是否包含在二叉树的子树中。这是函数:
public static boolean containsNodes(int n, int m, TreeNode node, int count){
if(node == null) return false;
if( count == 2) return true;
if(node.getData() == m || node.getData() == n){
count++;
}
return containsNodes(n, m, node.getLeft(), count) ||
containsNodes(n, m, node.getRight(), count);
}
看起来计数在以后的调用中永远不会更新,即使条件node.getData() == m || node.getData() == n 为真'。为什么会这样?
【问题讨论】:
-
考虑一个简单的 3 节点树(有 2 个子节点的父节点)。父节点有一个左节点和一个右节点。即使左右的数据分别为“n”和“m”,此方法也会失败,因为计数在每个分支上都是独立的。您最好传递包含计数的对象而不是用于确定计数的原语,因为按值传递会导致这里出现问题。也许我误解了你希望它如何工作。
标签: java algorithm recursion tree depth-first-search