當前位置:
首頁 >
二叉查找树 Java实现
發(fā)布時間:2025/7/14
32
豆豆
生活随笔
收集整理的這篇文章主要介紹了
二叉查找树 Java实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
定義:
一棵二叉查找樹是一棵二叉樹,每個節(jié)點都含有一個Comparable的鍵(以及對應的值)。
每個節(jié)點的鍵都大于左子樹中任意節(jié)點的鍵而小于右子樹中任意節(jié)點的鍵。
樹的術語:
| 路徑 | 順著連接點的邊從一個節(jié)點走向另一個節(jié)點,所經(jīng)過的節(jié)點的順序排列就稱為路徑。 |
| 根 | 樹頂端的節(jié)點就稱為根,一棵樹只有一個根,如果要把一個節(jié)點和邊的集合定義為樹,那么從根到其他任何一個節(jié)點都必須有一條路徑。 |
| 父節(jié)點 | 每個節(jié)點(除了根)都恰好有一條邊向上連接到另一個節(jié)點,上面的節(jié)點就稱為下面節(jié)點的“父節(jié)點”。 |
| 子節(jié)點 | 每個節(jié)點都可能有一條或多條邊向下連接其他節(jié)點,下面的這些節(jié)點就稱為它的“子節(jié)點”。 |
| 葉節(jié)點 | 沒有子節(jié)點的節(jié)點稱為“葉子節(jié)點”或簡稱“葉節(jié)點”。樹只能有一個根,但是可以有很多葉節(jié)點。 |
| 子樹 | 每個節(jié)點都可以作為子樹的根,它和它所有的子節(jié)點,子節(jié)點的子節(jié)點等都含在子樹中。 |
| 訪問 | 當程序控制流程到達某個節(jié)點的時候,就稱為“訪問”這個節(jié)點,通常是為了在這個節(jié)點處執(zhí)行某種操作,例如查看節(jié)點某個數(shù)據(jù)字段的值或者顯示節(jié)點。 |
| 遍歷 | 遍歷樹意味著要遵循某種特定的順序訪問樹中的所有節(jié)點。 |
| 層 | 一個節(jié)點的層數(shù)是指從根開始到這個節(jié)點有多少“代”。 |
| 關鍵字 | 可以看到,對象中通常會有一個數(shù)據(jù)域被指定為關鍵字值。這個值通常用于查詢或者其他操作。 |
| 二叉樹 | 如果樹中的每個節(jié)點最多只能有兩個子節(jié)點,這樣的樹就稱為“二叉樹”。 |
性質:
根據(jù)其二叉樹的特性,節(jié)點類如下:
public class Node {public int index;//關鍵字段public String data;//值public Node leftNode;//左節(jié)點public Node rightNode;//右節(jié)點@Overridepublic boolean equals(Object obj) {return EqualsBuilder.reflectionEquals(this, obj);}@Overridepublic int hashCode() {return HashCodeBuilder.reflectionHashCode(this);} }其中引用了commons-lang3包中的內容,作為對象進行比較
查找某個節(jié)點,相當于二分查找,如果小于當前節(jié)點,則走左邊,如果大于當前節(jié)點,則走右邊。當最后葉子節(jié)點還沒有找到,則沒有找到
public Node findNode(int key){Node current = root;while(current.index != key){if(key < current.index){//左節(jié)點current = current.leftNode;}else{//右節(jié)點current = current.rightNode;}if(current == null){return null;}}return current; }插入節(jié)點,按照插入的節(jié)點都不會出現(xiàn)重復關鍵字。每一次插入都將變?yōu)楦?jié)點的子節(jié)點,例如根節(jié)點關鍵字為1,接下來插入的節(jié)點則變?yōu)楦?jié)點的右子節(jié)點。
public void insertNode(int key,String value){Node node = new Node();node.index = key;node.data = value;if(root == null){root = node;return;}//找到插入節(jié)點的位置Node parent = root;Node current = root;while(true){parent = current;if(key == current.index){return;}if(key < current.index){//左節(jié)點current = current.leftNode;if(current == null){//當前節(jié)點已經(jīng)是葉子結點了parent.leftNode = node; return;}}else{current = current.rightNode;if(current == null){parent.rightNode = node;return;}}} }遍歷節(jié)點,中序遍歷.
刪除節(jié)點,分三種情況:
轉載于:https://www.cnblogs.com/skyice/p/10618303.html
總結
以上是生活随笔為你收集整理的二叉查找树 Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器软件二次开发
- 下一篇: Java纸牌拖拉机简单模拟