查找二叉树中大于x

时间:2016-06-09 21:21:41

标签: java algorithm recursion data-structures binary-tree

public static int nodesGreaterThanX(BinaryTreeNode<Integer> root,int k,int count)
{
    if(root==null)
        return 0;
    if(root.data>k){
        System.out.print(root.data + " ");
        count++;
    }
    int countLeft = nodesGreaterThanX(root.left, k,count);
    int countRight = nodesGreaterThanX(root.right, k,count);

    return count + countLeft + countRight;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    BinaryTreeNode<Integer> root = takeInput();
    int count = nodesGreaterThanX(root, 2,0);
    System.out.println();
    System.out.println(count);
}

我想获得大于x的节点数(在这种情况下为2),但我的答案没有正确,我无法在我的程序中找到问题 如果不需要,请不要改变逻辑,告诉我哪里出错了。

2 个答案:

答案 0 :(得分:3)

如果你从根向下走树,你根本不需要向下传播'计数' - 事实上你正在重复计算节点,因为它们对{{1}有贡献}},countcountLeft,因为您在将countRight传递给count之前将其增加为nodesGreaterThanX

public static int nodesGreaterThanX(BinaryTreeNode<Integer> node, int k) {
  if (node == null) {
    return 0;
  }

  int countLeft = nodesGreaterThanX(node.left, k);
  int countRight = nodesGreaterThanX(node.right, k);

  return (node.data > k ? 1 : 0) + countLeft + countRight;
}

答案 1 :(得分:1)

您不需要通过调用树传递count变量,它会在您递归时反复计算。

在每次通话中,您只需:

return countLeft + countRight;

如果当前节点符合标准,则添加另一个+ 1