查找二叉搜索树的高度

时间:2013-10-02 03:33:45

标签: height binary-search-tree infinite-loop

/ *      *找到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()) ) ;
    }
}

程序无限运行。无法找到原因,如果有人指导我会有所帮助

提前致谢

2 个答案:

答案 0 :(得分:0)

你确定findHeight()函数没有返回任何内容吗?你期待这个功能吗?发布更多代码会有所帮助。

答案 1 :(得分: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,则递归不会终止。