每日一資料結構封裝之二叉搜尋樹

2021-10-01 20:47:14 字數 2159 閱讀 3718

#include using namespace std;

template struct bstnode

bstnode() = default;

};template class bstree

;template bstree::bstree() :root(null){}; //建構函式

template bstree::~bstree()

;template void bstree::insert(t key) //插入函式

pnode = new bstnode(key); //建立新節點,插入到雙親節點相應的子節點

if (par == null)

else

else

par->lchild = pnode;

}pnode->parent = par;

};template bstnode* bstree::search1(t key) //迭代搜尋

return null;

};template bstnode* bstree::search2(t key) //遞迴搜尋

;template bstnode* bstree::search(bstnode* & pnode, t key) //遞迴搜尋

;template void bstree::remove(t key) //刪除結點

;template void bstree::remove(bstnode* pnode, t key) //刪除點有三種情況,討論如下

else

if (pnode->value != pdel->value)

pnode->value = pdel->value;

delete pdel;

}//進行遞迴刪除

else if (key > pnode->value)

else remove(pnode->lchild, key);

}};template bstnode* bstree::predecessor(bstnode* pnode)

return pnode;

}bstnode* par = pnode->parent;

while (par != null && par->lchild == pnode)

return par;

};/*

* 給定一棵二叉搜尋樹中的乙個結點,

* 有時需要按中序遍歷的次序查詢它的後繼。

* 如果所有的關鍵字互不相同,

* 則乙個結點xx的後繼是大於x.key的最小關鍵字的結點。

* 一棵二叉搜尋樹的結構允許我們通過沒有任何關鍵字的比較來確定乙個結點的後繼。

* 如果後繼存在,successor過程將返回一棵二叉搜尋樹中的結點xx的後繼;

* 如果xx是這棵樹中的最大關鍵字元素,則返回null

*/template bstnode* bstree::successor(bstnode* pnode)

return pnode;

}bstnode* par = pnode->parent;

while (par!=null&& par->rchild == pnode)

return par;

};template void bstree::preorder()

;template void bstree::preorder(bstnode*p)

};template void bstree::inorder()

;templatevoid bstree::inorder(bstnode* p)

};template void bstree::lastorder()

;template void bstree::postorder(bstnode* p)

;template t bstree::search_min(bstnode* p)

;template t bstree::search_max()

;template t bstree::search_max(bstnode*p)

;templatevoid bstree::destory()

;template void bstree::destory(bstnode* &p)

};

資料結構之二叉搜尋樹

什麼是二叉搜尋樹呢?它與別的資料結構相比其優勢又是什麼呢?一顆二叉搜尋樹就是以一顆二叉樹來組織和儲存資料的,如圖所示 圖a是包含6個節點 高度為2的二叉樹,圖b是包含相同關鍵字 高度為4的低效二叉樹 對比博文前面所介紹的鍊錶,二叉樹也是可以用結構體來實現,只不過每個節點裡面不僅要儲存資料本身的關鍵字...

資料結構與演算法之二叉搜尋樹

看到有個傢伙寫的很好 二叉查詢樹 二 之 c 的實現 二叉搜尋樹的定義 一棵二叉樹,可能為空 一棵非空的二叉搜尋樹滿足以下特徵 每個元素有乙個關鍵字,並且任意兩個元素的關鍵字都不同,因此,所有的關鍵字都是唯一的。在根節點的左子樹中,元素的關鍵字 如果有的話 都小於根節點的關鍵字。在根節點的右子樹中,...

演算法與資料結構之二叉搜尋樹

搜尋樹與二叉搜尋樹 搜尋樹是一種可以進行插入 搜尋 刪除等操作的資料結構。它可以用作字典或者優先順序佇列。二叉搜尋樹是最基本的搜尋樹。它的各個結點都有鍵值,並且滿足以下的條件 設x是二叉搜尋樹中的結點,y是它的左子樹中的結點,那麼,y的鍵值 x的鍵值。根據這一特點,我們就能實現一棵二叉搜尋樹。二叉搜...