JavaScript实现二叉树算法

二叉树的遍历方式

  分别为中序遍历(左子树->当前节点->右子树)、前序遍历(当前节点->左子树->右子树)、后序遍历(左子树->右子树->当前节点)。下面使用JavaScript语言实现二叉树的三种遍历算法。

  首先构造一个排序二叉树(即满足左子节点比父节点小,右子节点比父节点大的二叉树),然后对其分别进行中序、前序、后序遍历。

排序二叉树结构图如下图所示:

说明:

  其中8为根节点(没有父节点的节点),4,、7、13为叶子节点(最后一层上没有子节点的节点),3、10、1、6、14为中间节点。

该树的最大深度为4(共4层)。

具体代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>javaScript实现二叉树算法</title>
</head>
<body>
    <script type="text/javascript">

         function BinaryTree(){
             var Node = function(key) {//定义节点,包括父节点,左子节点,右子节点
                 this.key = key;//传入的元素值作为父节点
                 this.left = null;//左子节点初始为null
                 this.right = null;//右子节点初始为null
             };

             var root = null;//设置根节点初始值为空

             //  定义插入节点函数,入参为当前节点和新加的节点
             var insertNode = function(node, newNode) {
                if (newNode.key < node.key) {//若新节点的父节点值小于的当前的节点的父节点值,则往左半部分走
                    if (node.left === null) {//当前节点若没有左子节点,则新节点作为当前节点的左子节点
                        node.left = newNode;
                    } else {//若当前节点的左子节点存在,则递归调用插入节点函数
                        insertNode(node.left, newNode);
                    }
                } else {//若新节点的父节点值不小于当前节点的父节点值,则往右半部分走
                    if (node.right === null) {//若当前节点的右子节点不存在,则新节点作为当前节点的右子节点
                        node.right = newNode;
                    } else {//若当前节点的右子节点存在,则递归调用插入节点函数
                        insertNode(node.right, newNode);
                    }
                }
             };

             this.insert = function(key) {//定义插入节点函数
                 var newNode = new Node(key);//定义新节点
                 if (root === null) {//若根节点为空,则新节点作为根节点
                     root = newNode;
                 } else {//若根节点存在,则执行插入节点函数
                     insertNode(root, newNode);
                 }
             };
             //中序遍历:左子树->当前节点->右子树,结果是一个升序有序序列
             var inOrderTraverseNode = function(node, callback) {
                 if (node !== null) {//当前节点存在
                     inOrderTraverseNode(node.left, callback);//遍历左子树
                     callback(node.key);//执行回调函数
                     inOrderTraverseNode(node.right, callback);//遍历右子树
                 }
             }

             this.inOrderTraverse = function(callback) {
                 inOrderTraverseNode(root, callback);
             }

             //前序遍历:当前节点->左子树->右子树,常用于复制一个二叉树,效率高。
             var preOrderTraverseNode = function(node, callback) {
                 if (node !== null) {//当前节点不为空
                     callback(node.key);//执行回调函数
                     preOrderTraverseNode(node.left, callback);//遍历左子树
                     preOrderTraverseNode(node.right, callback);//遍历右子树
                 }
             }

             this.preOrderTraverse = function(callback) {
                 preOrderTraverseNode(root, callback);
             }

             //后序遍历:左子树->右子树->当前节点,常用于文件系统遍历
             var postOrderTraverseNode = function(node, callbakc) {
                 if (node !== null) {//当前节点不为空
                     postOrderTraverseNode(node.left, callback);//遍历左子树
                     postOrderTraverseNode(node.right, callback);//遍历右子树
                     callback(node.key);//执行回调函数
                 }
             }

             this.postOrderTraverse = function(callback) {
                 postOrderTraverseNode(root, callback);
             }
         }
         //测试二叉树排序
        var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
        var binaryTree = new BinaryTree();//实例化一个新的二叉树
        nodes.forEach(function(key) {//遍历数组中的所有元素,执行二叉树排序操作,生成排序二叉树
             binaryTree.insert(key);
        });
        //回调函数
        var callback = function(key) {
            console.log(key);//打印出当前节点值
        }
        //中序遍历测试
        binaryTree.inOrderTraverse(callback);
        //前序遍历测试
        binaryTree.preOrderTraverse(callback);
        //后序遍历测试
        binaryTree.postOrderTraverse(callback);

    </script>
</body>
</html>

原文地址:https://www.cnblogs.com/stm32stm32/p/9164929.html

时间: 2024-10-11 07:23:17

JavaScript实现二叉树算法的相关文章

javascript数据结构与算法--二叉树(插入节点、生成二叉树)

javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ /*用来生成一个节点*/ function Node(data, left, right) { this.data = data;//节点存储的数据 this.left = left; this.right = right; this.show = show; } function sh

二叉树算法

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>二叉树算法</title> <script type="text/javascript"> window.onload = function () { function Node(data, le

javascript常用经典算法实例详解

javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与使用技巧,需要的朋友可以参考下 本文实例讲述了javascript常用算法.分享给大家供大家参考,具体如下: 入门级算法-线性查找-时间复杂度O(n)--相当于算法界中的HelloWorld ? 1 2 3 4 5 6 7 8 9 10 //线性搜索(入门HelloWorld) //A为数组,x为要

javascript数据结构和算法 一(本书组织结构)

环境 我们在本书中使用的Javascript编程环境是基于SpiderMonkey 引擎的javascript shell. 第一章讲述了在你的环境中下载 shell的介绍. 其他的shell例如Nodejs同样可以工作,虽然你可能需要简单的改变下代码. 除了shell,唯一你要准备的就是文本编辑器. 本书的组织结构 第一章:javascript语言的概览,至少是在本书中使用的javascript的一些特征.这一章同时展示了在整本书中使用的一些编程风格. 第二章:讨论了在计算机科学中最通用的数据

javascript数组去重算法-----4(另一种写法)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数据结构与算法---列表

前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候上学那段时间,每次考完试后,学校都会列出这次考试成绩前十名的同学的排名及成绩单,等等这些都是列表的列子.我们计算机内也在使用列表,那么列表适合使用在什么地方呢?不适合使用在什么地方呢? 适合使用在:当列表的元素不是很多的情况下,可以使用列表,因为对列表中的元素查找或者排序时,效率还算非常高,反之:如果列表元素非常多的情况下,就不适合使用列表了.

【JavaScript】【算法】JavaScript版排序算法

JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) 1 //排序算法 2 window.onload = function(){ 3 var array = [0,1,2,44,4, 4 324,5,65,6,6, 5 34,4,5,6,2, 6 43,5,6,62,43, 7 5,1,4,51,56, 8 76,7,7,2,1, 9 45,4,6,7,8]; 10 //var array = [4,2,5,1,0,3]; 11 array

javascript数组去重算法-----4(另一种写法__2)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----5

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5