二叉搜尋樹的概念以及特性想必大家都有所了解,在這裡主要討論它的實現。
具體演算法思路見**注釋。
結果://測試環境為vs2013
#include
#include
using namespace std;
template
struct bstnode
bstnode
* _left;
bstnode
* _right;
t _data;};
template
class bstree
node*
copy
(node* root)
else
return nullptr;
}bstree
(const bstree
& bst)
bstree
& operator=
(const bstree
& bst)
_root =
copy
(bst._root);}
return
*this;
}void
destory
(node* root)}~
bstree()
//查詢
node*
find
(const t& x)
return nullptr;
}//插入
bool insert
(const t& x)
node* cur = _root;
node* parent = nullptr;
while
(cur != nullptr)
else
}//將x的值存入節點中
//再分析新節點值與parent節點值的大小關係
//若x大於parent值,就將parent的右指標鏈結cur;反之鏈結左指標
cur = new node
(x);
if(x > parent->_data)
parent->_right = cur;
else
parent->_left = cur;
return true;
}//刪除
bool erase
(const t& x)
else
}//沒找到
if(cur == nullptr)
return false;
//1.刪除的是葉子節點
if(cur->_left == nullptr && cur->_right == nullptr)
else
//刪除的是根
_root = nullptr;
delete cur;
cur = nullptr;
}//2.孩子節點不完整(有左無右,有右無左)
//要刪除的節點只有右孩子
else
if(cur->_left == nullptr)
else
delete cur;
cur = nullptr;
}//要刪除的節點只有左孩子 ***************************
else
if(cur->_right == nullptr)
else
delete cur;
cur = nullptr;
}//若要刪除的節點的左右孩子均完整
else
//找到了
//置換兩個節點的值,然後將leftmost節點刪除
cur->_data = leftmost->_data;
if(parent->_right == leftmost)
parent->_right = leftmost->_left;
else
parent->_left = leftmost->_left;
//刪除節點
delete leftmost;
leftmost = nullptr;
}return true;
}//中序遍歷
void
inorder()
//列印
void
print_inorder
(node* root)
}private:
node* _root;};
void
test()
intmain()
c 實現二叉搜尋樹
h部分 ifndef binaryserchtree bst h define binaryserchtree bst h include template class bst 宣告 template class element template class bstnode template cla...
c 實現二叉搜尋樹
c 實現二叉搜尋樹 include include using namespace std struct node class tree tree tree void tree creattree node rt,int n if rt data n else else void tree leve...
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...