2013-11-18 8 views
-1

Я попытался распечатать свое двоичное дерево поиска в отсортированном порядке, используя метод removeMin(), но каким-то образом вывод неправильный.Удаление минимального значения в двоичном дереве поиска?

Вот мой код:

public Node removeMin(Node insertNode){ 

    Node parentNode =root; 
    if (insertNode.left != null){ 
    return removeMin(insertNode.left); 
    } 
    if (insertNode.right ==null){ 
    parentNode.left = null; 
    }else { 
    parentNode.left = removeMin(insertNode.right); 
    } 
    return insertNode; 
} 
+2

Какой выход ? Каков ожидаемый результат? – Radiodef

+1

Для начала, если вы ничего не печатаете, я не вижу, как вы можете ожидать, что результат будет правильным. – Kevin

+0

Где находится 'root' из' Node parentNode = root; 'Можете ли вы показать больше своего кода? – Kara

ответ

0

проверка узла == NULL

public Node removeMin(Node root){ 
    if(root == NULL) 
     return NULL; 
    if (root.left != NULL){ 
     return removeMin(root.left); 
    } 
    if (insertNode.right == NULL){ 
     Node temp = root; 
     root = NULL; 
     return temp; 
    } 
    else { 
     return removeMin(root.right); 
    } 

    } 

не проверено ..

0

Попробуйте один

private Node removeMin(Node node){ 
    if(node.left.left == null) { 
     Node minNode = node.left; 
     node.left = node.left.right; 
     minNode.right = null; 
     return minNode; 
    } else { 
     return removeMin(node.left); 
    } 
} 

public Node removeMin() { 
    if(root == null) { 
     return null; 
    } else if(root.left != null) { 
     return removeMin(root); 
    } else { 
     Node minNode = root; 
     root = root.right; 
     minNode.right = null; 
     return minNode; 
    } 
} 
+0

Большое вам спасибо !!!!! Не могли бы вы объяснить алгоритмы для этого? – user2939823

+0

Важно то, что removeMin не может удалить узел, который был передан как аргумент, потому что у него нет доступа к его родительскому элементу. Вот почему я написал код, так что removeMin никогда не вызывается с узлом, у которого нет левого дочернего элемента. Поэтому мне понадобился второй метод removeMin, чтобы проверить, имеет ли корн левый дочерний элемент. Также я предположил, что все дочерние элементы возвращаемого узла должны быть пустыми. Я не уверен, что это то, чего ты хотел. – SpiderPig

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