コード例 #1
0
ファイル: BST.cpp プロジェクト: DArtagan/csci262
void BST<Item, Key>::remove_max_node(Node*& ptr, Item& data) {
    if (ptr->right == NULL) {
        Node* temp = ptr;
        data = ptr->data;
        ptr = ptr->left;
        delete temp;
    } else {
        remove_max_node(ptr->right, data);
    }
}
コード例 #2
0
ファイル: erase_fn_imps.hpp プロジェクト: 0day-ci/gcc
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
pop()
{
  PB_DS_ASSERT_VALID((*this))
  _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
  _GLIBCXX_DEBUG_ASSERT(m_p_max != 0);

  node_pointer p_nd = m_p_max;
  remove_max_node();
  base_type::actual_erase_node(p_nd);
  PB_DS_ASSERT_VALID((*this))
}
コード例 #3
0
ファイル: BST.cpp プロジェクト: DArtagan/csci262
bool BST<Item, Key>::remove_node(Node*& ptr, const Key& key) {
    if (ptr == NULL) {
        return false;
    }
    if (key < ptr->data) {
        return remove_node(ptr->left, key);
    } else if (key > ptr->data) {
        return remove_node(ptr->right, key);
        
    } else {
        if (ptr->left == NULL) {
            Node* temp = ptr;
            ptr = ptr->right;
            delete temp;
        } else {
            remove_max_node(ptr->left, ptr->data);
        }
    }
    return true;
}
コード例 #4
0
ファイル: erase_fn_imps.hpp プロジェクト: 0day-ci/gcc
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
remove_node(node_pointer p_nd)
{
  node_pointer p_parent = p_nd;
  while (base_type::parent(p_parent) != 0)
    p_parent = base_type::parent(p_parent);

  base_type::bubble_to_top(p_nd);
  m_p_max = p_nd;

  node_pointer p_fix = base_type::m_p_root;
  while (p_fix != 0&&  p_fix->m_p_next_sibling != p_parent)
    p_fix = p_fix->m_p_next_sibling;

  if (p_fix != 0)
    p_fix->m_p_next_sibling = p_nd;

  remove_max_node();
}