二叉排序樹
二叉查詢樹(英語:Binary Search Tree),也稱二叉搜尋樹、有序二叉樹(英語:ordered binary tree),排序二叉樹(英語:sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:
- 任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
- 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
- 任意節點的左、右子樹也分別為二叉查詢樹;
- 沒有鍵值相等的節點。
從上述定義可知,二叉排序樹是記錄之間滿足一定次序關係的二叉樹。下面介紹如何構建一棵二叉排序樹,以及遍歷,插入,查詢,也會簡單的介紹刪除結點操作。
構造一棵排序二叉樹,則一定要根據其定義來實現。下面給出相關程式碼:
上面的程式碼比較簡單的實現構造,遍歷,查詢。
但是在二叉查詢樹刪去一個結點,分三種情況討論:(如下參考維基百科:)
1.若*p結點為葉子結點,即PL(左子樹)和PR(右子樹)均為空樹。由於刪去葉子結點不破壞整棵樹的結構,則只需修改其雙親結點的指標即可。
2.若*p結點只有左子樹PL或右子樹PR,此時只要令PL或PR直接成為其雙親結點*f的左子樹(當*p是左子樹)或右子樹(當*p是右子樹)即可,作此修改也不破壞二叉查詢樹的特性。
3.若*p結點的左子樹和右子樹均不空。在刪去*p之後,為保持其它元素之間的相對位置不變,可按中序遍歷保持有序進行調整,可以有兩種做法:其一是令*p的左子樹為*f的左/右(依*p是*f的左子樹還是右子樹而定)子樹,*s為*p左子樹的最右下的結點,而*p的右子樹為*s的右子樹;其二是令*p的直接前驅(in-order predecessor)或直接後繼(in-order successor)替代*p,然後再從二叉查詢樹中刪去它的直接前驅(或直接後繼),該種情況較為複雜,如下圖示。
演算法:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1988155/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉查詢樹(二叉排序樹)排序
- 二叉樹的應用(1)--二叉樹排序樹基本操作二叉樹排序
- js之排序二叉樹JS排序二叉樹
- 二叉排序樹 oj 2482排序
- 【筆記】二叉排序樹筆記排序
- 二叉排序樹(水題)排序
- 判斷某棵二叉樹是否二叉排序樹二叉樹排序
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 二叉排序樹的實現排序
- 二叉排序樹BST及CRUD操作排序
- 建立一棵二叉排序樹排序
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 二叉樹排序樹的建立,遍歷和刪除二叉樹排序
- 使用javascript實現排序二叉樹(2)JavaScript排序二叉樹
- 使用javascript實現排序二叉樹(1)JavaScript排序二叉樹
- Java-二叉排序樹的刪除Java排序
- 二叉排序樹查詢,插入,刪除排序
- 二叉查詢樹【二叉排序樹】構建和查詢演算法 PHP 版排序演算法PHP
- 一文搞定二叉排序(搜尋)樹排序
- #查詢演算法#【2】二叉排序樹演算法排序
- Python 樹表查詢_千樹萬樹梨花開,忽如一夜春風來(二叉排序樹、平衡二叉樹)Python排序二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 查詢|有序表折半查詢判定樹|二叉排序樹|3階B-樹排序
- 將二叉排序樹BST轉換成排序的雙向連結串列排序
- 資料結構與演算法:二叉排序樹資料結構演算法排序
- 二叉樹 & 二叉查詢樹二叉樹
- 第三章:查詢與排序(下)----------- 3.15基礎學習_樹、二叉樹、堆排序排序二叉樹
- SDUTOJ 2128 樹結構練習——排序二叉樹的中序遍歷排序二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- C語言 遞迴實現二叉排序樹的插入C語言遞迴排序
- 完全二叉樹實現優先佇列與堆排序二叉樹佇列排序
- 什麼是泛型?,Set集合,TreeSet集合自然排序和比較器排序,資料結構-二叉樹,資料結構-平衡二叉樹泛型排序資料結構二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹
- 資料結構 實驗六(二叉排序樹字元統計)資料結構排序字元