javascript數(shù)據(jù)結構之二叉搜索樹實現(xiàn)方法
更新時間:2015年11月25日 15:04:18 作者:菩提樹下的楊過
這篇文章主要介紹了javascript數(shù)據(jù)結構之二叉搜索樹實現(xiàn)方法,較為詳細的分析了二叉搜索樹的概念、原理與JavaScript實現(xiàn)二叉搜索樹的方法,對于學習JavaScript數(shù)據(jù)結構具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了javascript二叉搜索樹實現(xiàn)方法。分享給大家供大家參考,具體如下:
二叉搜索樹:顧名思義,樹上每個節(jié)點最多只有二根分叉;而且左分叉節(jié)點的值 < 右分叉節(jié)點的值 。
特點:插入節(jié)點、找最大/最小節(jié)點、節(jié)點值排序 非常方便
二叉搜索樹-javascript實現(xiàn)
<script type="text/javascript">
// <![CDATA[
//打印輸出
function println(msg) {
document.write(msg + " ");
}
//節(jié)點類
var Node = function (v) {
this.data = v; //節(jié)點值
this.left = null; //左節(jié)點
this.right = null; //右節(jié)點
}
//二叉搜索樹類
var BinarySearchTree = function () {
this.root = null; //初始化時,根節(jié)點為空
//插入節(jié)點
//參數(shù):v 為節(jié)點的值
this.insert = function (v) {
var newNode = new Node(v);
if (this.root == null) {
//樹為空時,新節(jié)點,直接成為根節(jié)點
this.root = newNode;
return;
}
var currentNode = this.root; //工作“指針”節(jié)點(從根開始向下找)
var parentNode = null;
while (true) {
parentNode = currentNode;
if (v < currentNode.data) {
//當前節(jié)點的值 > 目標節(jié)點的值
//應該向左插,工作節(jié)點移到左節(jié)點
currentNode = currentNode.left;
if (currentNode == null) {
//沒有左節(jié)點,則新節(jié)點,直接成為左節(jié)點
parentNode.left = newNode;
return; //退出循環(huán)
}
}
else {
//否則向右插,工作節(jié)點移到右節(jié)點
currentNode = currentNode.right;
if (currentNode == null) {
parentNode.right = newNode;
return;
}
}
}
}
//查找最小節(jié)點
this.min = function () {
var p = this.root; //工作節(jié)點
while (p != null && p.left != null) {
p = p.left;
}
return p;
}
//查找最大節(jié)點
this.max = function () {
var p = this.root; //工作節(jié)點
while (p != null && p.right != null) {
p = p.right;
}
return p;
}
//中序遍歷
this.inOrder = function (rootNode) {
if (rootNode != null) {
this.inOrder(rootNode.left); //先左節(jié)點
println(rootNode.data); //再根節(jié)點
this.inOrder(rootNode.right); //再右節(jié)點
}
}
//先序遍歷
this.preOrder = function (rootNode) {
if (rootNode != null) {
println(rootNode.data); //先根
this.preOrder(rootNode.left); //再左節(jié)點
this.preOrder(rootNode.right); //再右節(jié)點
}
}
//后序遍歷
this.postOrder = function (rootNode) {
if (rootNode != null) {
this.postOrder(rootNode.left); //先左節(jié)點
this.postOrder(rootNode.right); //再右節(jié)點
println(rootNode.data); //再根節(jié)點
}
}
}
//以下是測試
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("最小節(jié)點:" + (minNode == null ? "不存在" : minNode.data));
println("<br/>");
var maxNode = bTree.max();
println("最大節(jié)點:" + (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> 最小節(jié)點:1 <br> 最大節(jié)點:9-->
輸出結果:
中序遍歷: 1 3 4 6 8 9 先序遍歷: 6 3 1 4 8 9 后序遍歷: 1 4 3 9 8 6 最小節(jié)點:1 最大節(jié)點:9
希望本文所述對大家JavaScript程序設計有所幫助。
相關文章
JS+CSS實現(xiàn)自動改變切換方向圖片幻燈切換效果的方法
這篇文章主要介紹了JS+CSS實現(xiàn)自動改變切換方向圖片幻燈切換效果的方法,實例分析了javascript操作圖片切換方向的幻燈片技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
基于Node.js的JavaScript項目構建工具gulp的使用教程
也許你使用過grunt,那么這里來安利gulp的話就更加不會陌生了,下面我們就來看一下基于Node.js的JavaScript項目構建工具gulp的使用教程2016-05-05

