C 實現二叉搜尋樹 BSTree

2021-09-24 01:35:50 字數 2359 閱讀 2072

二叉搜尋樹的概念以及特性想必大家都有所了解,在這裡主要討論它的實現。

具體演算法思路見**注釋。

//測試環境為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...