0

/* * BST ツリーの高さを調べる */

public void findHeight(){
    if(this.root == null){
        System.out.println("BST Tree is Empty ");
    }
    else
        findHeight(this.root);
}
public int findHeight(Tnode temp){
    if(temp == null){
        System.out.println("BST Tree is Empty ");
        return  -1;
    }
    else{
        return 1 + Math.max(findHeight(temp.getLeft()) ,findHeight(temp.getRight()) ) ;
    }
}

プログラムは無限に実行されています.理由を見つけることができません.誰かが私を導いてくれると助かります.

前もって感謝します

4

2 に答える 2

0

「BST Tree is Empty」は、ツリーのすべての終端リーフにも出力されます。

何が起こっているのかを調べるために、デバッグ出力を追加できます。

private spaces(int len){
    String s = "       ";

    while (s.Length < len) {
      s += "        ";
    }

   return s.substring(0, len);
}

public int findHeight(Tnode temp, int nesting, String msg){
    String margin = spaces(2*nesting);

    if(temp == null){
        System.out.println(margin + msg + ": no sub-tree to explore");
        return  -1;
    }
    else{
        System.out.println(margin + msg);
        int hl = findHeight(temp.getLeft(), nesting + 1, "left");
        int hr = findHeight(temp.getRight(), nesting + 1, "right");

        return 1 + (hl >= hr ? hl : hr) ;
    }
}

無限再帰は、ツリー構造のエラーが原因である可能性があります。左/右の子参照が null にならない場合、再帰は終了しません。

于 2013-10-02T12:47:40.910 に答える
0

findHeight() 関数が何も返さないのは確かですか? その機能に何か期待していますか?より多くのコードを投稿すると役立ちます。

于 2013-10-02T03:41:56.630 に答える