查詢樹以一種資料結構,它支援多種動態集合操作,包括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,既乙個扇區 這之間的轉換是由作業系統來完成的。扇區 磁碟碟片上的扇形區域,邏輯化資料,方便管...