2016-11-08 29 views
-1

试图想出一个算法来访问BST中的每个节点并比较每个节点以找到最大的int值,我的BST是不平衡的并且按字母顺序排序,但是它们具有int值并且我需要找到树中最大的int值。需要递归算法来搜索所有BST

我的代码是:

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;` 

} 

我知道什么时候该方法调用被弹出从堆栈攀比发生,但我不知道如果我最终实际检查的所有节点

+2

如果你可以在你的描述中加入一些(格式化的)代码,这里的人可能会更好地帮助你解决你的语法问题。你的伪代码非常准确,并且正确地使用递归。 –

+0

@MileHigh请你详细说明这个 '我的BST是不平衡和按字母顺序排序的,但是它们具有int值。整数值和字符之间的排序顺序是什么? – radbrawler

回答

0

随着你BST不按数据排序,那么您需要遍历每个节点并在它们之间进行比较。删除那些检查right.data < rightEle.data & 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; 


}