首页 > 解决方案 > 从二叉搜索树中删除节点时遇到问题

问题描述

我在从二叉搜索树中删除节点时遇到问题。

void BST::delete_node(Node* out)
{
   Node* tmp;
   Node* cur;
   if(out->get_left() == NULL || out->get_right() == NULL) {
        tmp = out;
   }
   else {
        tmp = get_succ(out);
   }

   if(tmp->get_left() != NULL) {
        cur = tmp->get_left();
   }
   else {
        cur = tmp->get_right();
   }

   if(cur != NULL) {
        cur->add_parent(tmp->get_parent());
   }

   if(tmp->get_parent() == NULL) {
           root = cur;
   }
   else if(tmp == (tmp->get_parent())->get_left()) {
        (tmp->get_parent())->add_left(cur);
   }

   else {
        (tmp->get_parent())->add_right(cur);
   }

   if(tmp->get_key() != out->get_key()) {
        out = nullptr;
   }
}

这里似乎是什么问题,导致节点没有从二叉搜索树中删除。

标签: c++binary-search-tree

解决方案


推荐阅读