左子樹上所有節點的關鍵碼(key)都小於根節點的關鍵碼(key)。
右子樹上所有節點的關鍵碼(key)都大於根節點的關鍵碼(key)。
左右子樹都是二叉搜尋樹。
bool insert(const t& key)
node* cur = _root;
node* parent = null;
while (cur)
else
if (cur->_key > key)
else
return
false;
} cur = new node(key);
if (parent->_key > cur->_key)
else
parent->_right = cur;
return
true;
}
只有乙個孩子的非葉子結點
其他結點
不是葉子結點,怎麼刪?
(讓parent和cur不為空的孩子(右孩子)連起來)
注意cur是根結點的情況(parent ==null)
判斷cur是parent 的左還是右,parent->_left(_right) = cur->_right;
cur右為空
(讓parent和cur不為空的孩子(左孩子)連起來)
注意cur是根結點的情況(parent ==null)
判斷cur是parent 的左還是右,parent->_left(_right) = cur->_left;
cur左右都不為空
找替代結點(和key大小最接近的兩個結點之一都可以),左樹的最右結點(小的裡面找最大的)或 ,右樹的最左結點(大的裡的最小的)。
找替代結點時要記錄替代結點的parent,找到替代結點後, cur->_key= sub ->_key,
然後刪除替代結點,(讓parent和替代結點不為空的孩子(右孩子)連起來)
若在左樹中找最右(最大)則替代結點的右為null,左不一定為null;
若在右樹中找最左(最小)則替代結點的左為null,右不一定為null;
bool remove(const t& key)
else
if (cur->_key > key)
else
//找到要刪的結點了
else
if (parent->_left == cur)
parent->_left = cur->_right;
else
parent->_right = cur->_right;
}else
if (cur->_right == null )//右為空
else
if (parent->_left == cur)
parent->_left = cur->_left;
else
parent->_right = cur->_left;
}else
//左右都不為空
cur->_key = sub->_key;
parent->_left = sub->_right;
del = sub;
}delete del;
return
true;
}} }
node* find
(const t& key)
node* cur = _root;
while (cur)
else
if (cur->_key > key)
else
} cout
<< "沒找到"
<< key << endl;
return
null;
}
bool _insertr(node* &root,const k& key)
if(root->_key > key)
return _insertr(root->left,key);
else
if(root->key
< key)
return _insert(root->right,key);
else
return
false;
}bool insertr(const k& key)
node* _findr(node* &root, const t& key)
if (root->_key < key)
_findr(root->_right, key);
else
if (root->_key > key)
_findr(root->_left, key);
else
}node* findr(const t& key)
bool _remover(node* &root,const k& key)
else
if (root ->key >key)
else
if(root->key < key)
else
root->key = sub->key
; return _remover(root->right,sub->key);
}delete del;
return ture;
}}
二叉搜尋樹 Binary Search Tree
完整 二叉搜尋樹是這樣一種二叉樹,對於乙個結點x,如果它的左子樹的結點值都小於x,它的右子樹的結點值都大於x。並且他的左子樹和右子樹也滿足此特性的二叉樹。二叉搜尋樹的中序遍歷可得到資料的有序序列。bst結點的前驅是指該結點的前乙個結點,即指向該結點的結點。bst結點的後繼是指該結點的右子樹中值最接近...
二叉查詢樹 Binary Search Tree
本帖部分文字和來自於 但所有 均為原創 二叉查詢樹 英語 binary search tree 也稱二叉搜尋樹 有序二叉樹 英語 ordered binary tree 排序二叉樹 英語 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 二叉查詢樹相比於其他資料結構的優勢在...
二叉查詢樹 BinarySearchTree
一 定義tree介面public inte ce treeextends iterable二 實現抽象便利類abstracttree public abstract class abstracttreeimplements tree override public void preorder ove...