2016-11-08 2 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

Если вы можете поместить некоторый (отформатированный) код в свое описание, люди здесь могут лучше помочь вам с вашей синтаксической проблемой. Ваш psuedo-код довольно точен и правильно использует рекурсию. –

+0

@MileHigh, пожалуйста, продумайте это 'my 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; 


} 
Смежные вопросы