需要递归算法来搜索所有BST

时间:2016-11-08 01:37:38

标签: java recursion binary-search-tree

尝试提出一个算法来访问BST中的每个节点并比较每个节点以找到最大的int值,我的BST是不平衡的并按字母顺序排序但是有int值,我需要找到最大的int值树。

我的代码是:

private Object Mode(BinaryTreeNode root) {
    if (root == null) {
        return null;
    }

    Object left = root.getElement();
    Object right = root.getElement();

    if (root.getLeftChild() != null) {

        Object leftEle = root.getLeftChild().getElement();

        if (left.data < leftEle.data) {
            left = Mode(root.getLeftChild());

        }
    }

    if (root.getRightChild() != null) {

        Object rightEle = root.getRightChild().getElement();

        if (right.data < rightEle.data) {
            right = Mode(root.getRightChild());

        }
    }

    if(left.data > right.data){
        return left;
    }

    return right;`

}

我知道当方法调用从堆栈弹出时会发生比较,但我不确定我是否最终实际检查了所有节点

1 个答案:

答案 0 :(得分:0)

由于您的BST未按数据排序,因此您需要遍历每个节点并在它们之间进行比较。删除这些支票right.data < rightEle.data&amp; left.data < leftEle.data,它会限制搜索空间。我还没编译你的代码。它应该是这样的:

private Object Mode(BinaryTreeNode root) {
    if (root == null) {
        return null;
    }

    Object left = root.getElement();
    Object right = root.getElement();

    if (root.getLeftChild() != null) {

        Object leftEle = root.getLeftChild().getElement();        
        left = Mode(root.getLeftChild());    
    }

    if (root.getRightChild() != null) {    
        Object rightEle = root.getRightChild().getElement();
        right = Mode(root.getRightChild());
    }
    if(left != null ){
        if(right != null)
            if(left.data < right.data
                return right;
        return left;

    }

    return right;


}