C 二叉搜尋樹的基本操作與實現

2021-10-07 10:05:30 字數 2009 閱讀 9633

二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹:

若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值;

若它的右子樹不為空,則右子樹上所有節點的值都大於根節點的值;

它的左右子樹也分別為二叉搜尋樹;

bool find(const k& key)    //查詢

bool insert(const k& key)    //插入

node* parent = nullptr;

node* cur = _root;

while (cur)

else if (cur->_key > key)

else

}cur = new node(key);

if (parent->_key < key)

else

return true;

}

首先查詢元素是否在二叉搜尋樹中,如果不存在,則返回,否則要刪除的結點可能分為下面4中情況:

要刪除的結點無孩子節點

要刪除的結點只有左孩子結點

要刪除的結點只有右孩子結點

要刪除的結點有左、右孩子結點

要刪除結點有4種可能性,實際情況1可以與情況2或者情況3合併起來,因此刪除過程如下:

#includeusing namespace std;

templatestruct bstreenode

};templateclass bstree

node* parent = nullptr;

node* cur = _root;

while (cur)

else if (cur->_key > key)

else

}cur = new node(key);

if (parent->_key < key)

else

return true;

}bool find(const k& key) //查詢

return false;

}bool erase(const k& key) //刪除

else if (cur->_key > key)

else

else

delete cur;

}else if (cur->_right == nullptr)

else

delete cur;

}else

cur->_key = rightmin->_key;

if (rightmin == rightminparent->_left)

rightminparent->_left = rightmin->_right;

else

rightminparent->_right = rightmin->_left;

delete rightmin;

}return true;}}

return false;

}void _inorder(node* root)

void inorder() //中序遍歷

private:

node* _root = nullptr;

};void test()

; for (auto e : a)

t.inorder();

for (auto e : a)

}int main()

over!

c 二叉搜尋樹 基本操作

前面我們寫過二叉樹,兩種樹基本是相同的結構,但是二叉搜尋樹又有固定的一些條件,下來我們一起看.二叉搜尋樹又稱二叉排序樹,它有兩種可能 1.空樹 2.非空樹,滿足 a.若左子樹不為空,則左子樹上所有的點都小與根節點 b.若右子樹不為空,則右子樹上所有的點都大於根節點 c.它的左右子樹也分別為二叉搜尋樹...

二叉搜尋樹的基本操作

建立乙個非負二叉搜尋樹 1表空結點 編寫查詢函式,層序遍歷函式,插入函式,刪除函式,查詢最大值最小值函式 輸入該樹和要查詢的值 輸出 如果找到,列印出 x is found 沒找到列印出 not found 列印出層序遍歷序列 刪除最大值和最小值 刪除成功輸出 x is delete 最後再進行一層...

二叉搜尋樹的基本操作

二叉搜尋樹 binary search tree 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉搜尋樹樹。節點設定 typedef int datat...