尝试提出一个算法来访问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;`
}
我知道当方法调用从堆栈弹出时会发生比较,但我不确定我是否最终实际检查了所有节点
答案 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;
}