遍历二叉树到给定深度?

时间:2015-07-26 19:29:06

标签: java recursion binary-tree

我必须遍历一个给定深度的二叉树,然后确定该深度之后的节点数,但是我在确定如何遍历给定深度时遇到一些麻烦。到目前为止我所拥有的是。

{{1}}

我可能在递归方面做错了,但我的想法是左边或右边的深度是否等于给定的深度,然后增加深度并再次运行。如果它在正确的深度,那么它应该为计数加1并继续。

2 个答案:

答案 0 :(得分:0)

在我们弄清楚如何做之前,让我们逐行分析下面的代码......

public static int sizeBelow (Node x, int y) { // y is very ambiguous 
    if (t == null) {// I am guessing t should be x
    return 0;

}else{

    int count = 0; // the number of nodes below the depth barrier y
    int leftDepth = 0; // this will always be 0 since you never alter it
    int rightDepth = 0; // this to

  if(leftDepth < y){ // this will never not go off unless y is 0 
    leftDepth=1+sizeBelow(x.left, y); // we must decrement y
  }else{ // or we will never enter here 
    count=1+sizeBelow(x.left,y);  // this should be + =
  }

  if(rightDepth < y){ // this will also never not go off
    rightDepth= 1+sizeBelow(x.right,y); // y is again not decremented
  }else{ // this will never be reached
    count=1+sizeBelow(x.right,y); // this to
  }
  return count;
}

你必须明白,在递归中,每个函数调用都使用恰好具有相同名称的新变量,除非你传递它们,否则在递归调用中永远不会考虑右深度和左深度的变化。

这是我改变的代码

public static int sizeBelow (Node x, int depth) {  
    if (x == null) {
    return 0;

}else{
  int count = 0; 
  if(depth == 0){
    count +=sizeBelow(x.left, (depth - 1)); 
    count +=sizeBelow(x.right, (depth - 1)); 
  }else{  
    count +=1+sizeBelow(x.left,depth);  
    count +=1+sizeBelow(x.right,depth);
  }


  return count;
}

答案 1 :(得分:0)

您可以使用Depth / Breadth first search搜索二叉树。但是做一些改变:

在函数外创建一个变量:

int count = 0;

为递归函数添加一个额外的布尔参数:

public static int sizeBelow(Node x, boolean afterNode){

点击Node后,使用if语句并将布尔值设置为true:

if(currentNode == x || afterNode){

    return sizeBelow(currentNode.right, true);

else{

    return sizeBelow(currentNode.right, false);

对左孩子采用相同的方法

然后添加条件:

if(afterNode){

    if(currentNode.right != null){
        count++;
    }

}

再次为左孩子应用相同的方法。

你看到了这种方法吗?

您可以使用任何二叉树搜索算法