本文实例讲述了javascript二叉搜索树实现方法。分享给大家供大家参考,具体如下:
二叉搜索树:顾名思义,树上每个节点最多只有二根分叉;而且左分叉节点的值 < 右分叉节点的值 。
特点:插入节点、找最大/最小节点、节点值排序 非常方便
二叉搜索树-javascript实现
<script type="text/javascript">
// <![CDATA[
//打印输出
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-->
输出结果:
中序遍历: 1 3 4 6 8 9 先序遍历: 6 3 1 4 8 9 后序遍历: 1 4 3 9 8 6 最小节点:1 最大节点:9
希望本文所述对大家JavaScript程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“javascript数据结构之二叉搜索树实现方法”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2025年10月30日
2025年10月30日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]