《演算法導論》學習筆記 第十二章 二叉查詢樹

2021-06-04 18:21:35 字數 2798 閱讀 1455

查詢樹以一種資料結構,它支援多種動態集合操作,包括search,minimum,maximum,predecessor,successor,insert以及delete,它既可以用作字典,也可以用作優先佇列。

二叉查詢樹的執行的基本操作的時間與樹的高度成正比。對於一棵含有n個結點的完全二叉樹,這些操作的最壞情況執行時間俄為o(lgn)。

二叉查詢樹實現

二叉查詢樹定義:1、關鍵字不同唯一 2、左子樹關鍵字小於根節點 3、右子樹關鍵字大於根節點 4 左右子樹也是一棵排序二叉樹

注:在實際應用中右子樹可也以

大於等於

根節點

堆:不能刪除任意元素,查詢時間複雜度n,當插入、刪除、查詢時 二叉排序樹結構最好

二叉查詢樹基本操作:查詢 插入 刪除

(需要詳細學習請參考《演算法導論》第十二章-二叉查詢樹,本**根據演算法導論實現,參照學習效果更佳 )

1.二叉查詢樹

一棵二叉查詢樹是按二叉樹結構來組織的。可以用鍊錶結構來表示,每個結點就是乙個物件。節點中有key,lchild(左子樹),rchild(右子樹)

定義結點:

#ifndef __treenode_h__

#define __treenode_h__

templateclass ctreenode

;

~ctreenode();

};#endif

操作:

#include "treenode.h"

#ifndef __binarytree_h__

#define __binarytree_h__

templateclass cbinarytree

;#endif

templatecbinarytree::cbinarytree() //建構函式,結點初始化為空

templatecbinarytree::~cbinarytree()

templatebool cbinarytree::treeempty() //判斷結點是否為空

templatebool cbinarytree::insertelement(element value) //插入結點

if (q == null)

else if (value < q->key) //當值小於q->key,把value放在q的左子樹

else

return false;

}templatevoid cbinarytree::inordertree(ctreenode*root) //中序遍歷,遞迴輸出左子樹和右子樹即從小到大排列的

}templatectreenode* cbinarytree::search(element value) //查詢

return p;

}templatectreenode* cbinarytree::parent(ctreenode* child)

else

}return q;

}templatectreenode* cbinarytree::maxvalue(ctreenode*root)

return p;

}templatectreenode* cbinarytree::minvalue(ctreenode*root)

return p;

}templatectreenode* cbinarytree::postnode(ctreenode* node) //後繼結點

ctreenode*p = node;

ctreenode*par = parent(p);

while (par != null && par->rchild == p) //2.當其父節點的左子樹是它時才跳出迴圈。

return par;

}templatebool cbinarytree::deletevalue(element value)

else

q = postnode(p);

s = parent(q);

if (q->lchild != null)

else if (s!=null && s->rchild == q)

else

else if (s!=null && s->rchild == q)

}if (s==null)

root->key = q->key;

if (q!=p)

delete q;

return true;

}}

測試:

#include #include "binarytree.h"

#include "treenode.h"

using namespace std;

int main()

else }

templatebool cbinarytree::isbalancetree(ctreenode*root)

int depthleft = depthtree(root->lchild);

int depthright = depthtree(root->rchild);

if (abs(depthleft - depthright) > 1)

else

return isbalancetree(root->lchild)&&isbalancetree(root->rchild);

}

演算法導論第十二章筆記

這裡的二叉樹型別分別包含關鍵字key,left right parent 指標分別指向左孩子 右孩子 雙親。若對應節點不存在就用nullptr空指標代替。這裡的二叉搜尋樹,對於任何節點x,其左子數的關鍵字最大不超過x key,其右子樹的關鍵字不低於x key。二叉樹遍歷有中序,先序,後序三種遍歷方式...

演算法導論 第十二章 二叉搜尋樹

搜尋樹資料結構支援許多動態集合操作,包括search minimum maximum predecessor successor insert delete等。因此,我們是用一棵搜尋樹既可以作為乙個字典又可以作為乙個優先佇列。二叉搜尋樹的基本操作所花費的時間與這棵樹的高度成正比 所以相同的資料,組織...

第十二章學習筆記

塊裝置將資訊儲存在固定大小的塊中,每個塊都有自己的位址。對作業系統來說,塊裝置是以字元裝置的外觀展現的,雖然對這種字元裝置可以按照位元組為單位進行訪問,但是實際上到塊裝置上卻是以塊為單位 最小512byte,既乙個扇區 這之間的轉換是由作業系統來完成的。扇區 磁碟碟片上的扇形區域,邏輯化資料,方便管...