二叉搜尋樹程式碼例項
所謂的二叉搜尋樹就是樹上每個節點最多隻有二根分叉;而且左分叉節點的值 < 右分叉節點的值 。
特點是插入節點、找最大/最小節點、節點值排序 非常方便。
例項程式碼如下:
[HTML] 純文字檢視 複製程式碼<!doctype html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <script type="text/javascript"> //列印輸出 function println(msg) { document.write(msg + " "); } //節點類 var Node = function (v) { this.data = v; //節點值 this.left = null; //左節點 this.right = null; //右節點 } //二叉搜尋樹類 var BinarySearchTree = function () { this.root = null; //初始化時,根節點為空 //插入節點 //引數:v 為節點的值 this.insert = function (v) { var newNode = new Node(v); if (this.root == null) { //樹為空時,新節點,直接成為根節點 this.root = newNode; return; } var currentNode = this.root; //工作“指標”節點(從根開始向下找) var parentNode = null; while (true) { parentNode = currentNode; if (v < currentNode.data) { //當前節點的值 > 目標節點的值 //應該向左插,工作節點移到左節點 currentNode = currentNode.left; if (currentNode == null) { //沒有左節點,則新節點,直接成為左節點 parentNode.left = newNode; return; //退出迴圈 } } else { //否則向右插,工作節點移到右節點 currentNode = currentNode.right; if (currentNode == null) { parentNode.right = newNode; return; } } } } //查詢最小節點 this.min = function () { var p = this.root; //工作節點 while (p != null && p.left != null) { p = p.left; } return p; } //查詢最大節點 this.max = function () { var p = this.root; //工作節點 while (p != null && p.right != null) { p = p.right; } return p; } //中序遍歷 this.inOrder = function (rootNode) { if (rootNode != null) { this.inOrder(rootNode.left); //先左節點 println(rootNode.data); //再根節點 this.inOrder(rootNode.right); //再右節點 } } //先序遍歷 this.preOrder = function (rootNode) { if (rootNode != null) { println(rootNode.data); //先根 this.preOrder(rootNode.left); //再左節點 this.preOrder(rootNode.right); //再右節點 } } //後序遍歷 this.postOrder = function (rootNode) { if (rootNode != null) { this.postOrder(rootNode.left); //先左節點 this.postOrder(rootNode.right); //再右節點 println(rootNode.data); //再根節點 } } } //以下是測試 var bTree = new BinarySearchTree(); //《沙特.演算法設計技巧與分析》書上圖3.9 左側的樹 bTree.insert(6); bTree.insert(3); bTree.insert(8); bTree.insert(1); bTree.insert(4); bTree.insert(9); println('中序遍歷:') bTree.inOrder(bTree.root); println("<br/>"); println("先序遍歷:"); bTree.preOrder(bTree.root); println("<br/>"); println("後序遍歷:"); bTree.postOrder(bTree.root); println("<br/>"); var minNode = bTree.min(); println("最小節點:" + (minNode == null ? "不存在" : minNode.data)); println("<br/>"); var maxNode = bTree.max(); println("最大節點:" + (maxNode == null ? "不存在" : maxNode.data)); </script> <!--中序遍歷: 1 3 4 6 8 9 <br> 先序遍歷: 6 3 1 4 8 9 <br> 後序遍歷: 1 4 3 9 8 6 <br> 最小節點:1 <br> 最大節點:9--> </head> <body> </body> </html>
相關文章
- 二叉搜尋樹
- div css搜尋框效果程式碼例項CSS
- 美觀的搜尋框程式碼例項
- 搜尋框帶有搜尋提示點選消失程式碼例項
- 搜尋框關鍵字智慧匹配例項程式碼例項
- 程式碼隨想錄day18 || 530 二叉搜尋樹最小差,501 二叉搜尋樹眾數,236 二叉搜尋樹最近公共祖先
- jQuery可伸縮搜尋框程式碼例項jQuery
- Day20 | 654.最大二叉樹 、 617.合併二叉樹 、 700.二叉搜尋樹中的搜尋 98.驗證二叉搜尋樹二叉樹
- 程式碼隨想錄 第20天 20的總結沒看 | 654.最大二叉樹 ● 617.合併二叉樹 ● 700.二叉搜尋樹中的搜尋 ● 98.驗證二叉搜尋樹二叉樹
- 程式碼隨想錄演算法訓練營第第20天 | 654.最大二叉樹 、617.合併二叉樹 、700.二叉搜尋樹中的搜尋、98.驗證二叉搜尋樹演算法二叉樹
- javascript實現二叉搜尋樹JavaScript
- 二叉搜尋樹的操作集
- 有序表和搜尋二叉樹二叉樹
- 二叉搜尋樹的結構
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 程式碼隨想錄 第23天 | 669. 修剪二叉搜尋樹 ● 108.將有序陣列轉換為二叉搜尋樹 ● 538.把二叉搜尋樹轉換為累加樹 ● 總結篇陣列
- 程式碼隨想錄演算法訓練營第十七天| 654.最大二叉樹 , 617.合併二叉樹 , 700.二叉搜尋樹中的搜尋 , 98.驗證二叉搜尋樹演算法二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹
- 演算法篇 - 二叉搜尋樹演算法
- 資料結構-二叉搜尋樹資料結構
- 【資料結構】二叉搜尋樹!!!資料結構
- 96. 不同的二叉搜尋樹
- 滑鼠懸浮可以伸縮的搜尋框程式碼例項
- js搜尋關鍵詞自動匹配功能程式碼例項JS
- 程式碼隨想錄演算法訓練營第23天 | 669. 修剪二叉搜尋樹、108.將有序陣列轉換為二叉搜尋樹、538.把二叉搜尋樹轉換為累加樹演算法陣列
- 程式碼隨想錄演算法訓練營,9月17日 | 669. 修剪二叉搜尋樹,108.將有序陣列轉換為二叉搜尋樹,538.把二叉搜尋樹轉換為累加樹演算法陣列
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- 程式碼隨想錄演算法訓練營第22天 |二叉樹part07:235. 二叉搜尋樹的最近公共祖先、701.二叉搜尋樹中的插入操作、450.刪除二叉搜尋樹中的節點演算法二叉樹
- 資料結構之「二叉搜尋樹」資料結構
- 二叉搜尋樹的python實現Python
- 一文搞定二叉排序(搜尋)樹排序
- 資料結構☞二叉搜尋樹BST資料結構
- 程式碼隨想錄演算法訓練營day23 | leetcode 669. 修剪二叉搜尋樹、108. 將有序陣列轉換為二叉搜尋樹、538. 把二叉搜尋樹轉換為累加樹演算法LeetCode陣列
- 程式碼隨想錄演算法訓練營第19天|235. 二叉搜尋樹的最近公共祖先 ,701.二叉搜尋樹中的插入操作,450.刪除二叉搜尋樹中的節點演算法
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹