javascript如何实现二叉树的创建和遍历?(代码示例)

javascript如何实现二叉树的创建和遍历?(代码示例)

本篇文章给大家介绍一下使用javascript实现二叉树的创建和遍历的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

1、先说二叉树的遍历,遍历方式:

前序遍历:先遍历根结点,然后左子树,再右子树

中序遍历:先遍历左子树,然后根结点,再右子树

立即学习“Java免费学习笔记(深入)”;

后续遍历:先遍历左子树,然后右子树,再根结点

javascript如何实现二叉树的创建和遍历?(代码示例)javascript如何实现二叉树的创建和遍历?(代码示例) javascript如何实现二叉树的创建和遍历?(代码示例)

 上代码:主要还是利用递归

function TreeCode() {    let BiTree = function (ele) {        this.data = ele;        this.lChild = null;        this.rChild = null;    }    this.createTree = function () {        let biTree = new BiTree('A');        biTree.lChild = new BiTree('B');        biTree.rChild = new BiTree('C');        biTree.lChild.lChild = new BiTree('D');        biTree.lChild.lChild.lChild = new BiTree('G');        biTree.lChild.lChild.rChild = new BiTree('H');        biTree.rChild.lChild = new BiTree('E');        biTree.rChild.rChild = new BiTree('F');        biTree.rChild.lChild.rChild = new BiTree('I');        return biTree;    }}//前序遍历function ProOrderTraverse(biTree) {    if (biTree == null) return;    console.log(biTree.data);    ProOrderTraverse(biTree.lChild);    ProOrderTraverse(biTree.rChild);}//中序遍历function InOrderTraverse(biTree) {    if (biTree == null) return;    InOrderTraverse(biTree.lChild);    console.log(biTree.data);    InOrderTraverse(biTree.rChild);}//后续遍历function PostOrderTraverse(biTree) {    if (biTree == null) return;    PostOrderTraverse(biTree.lChild);    PostOrderTraverse(biTree.rChild);    console.log(biTree.data);}let myTree = new TreeCode();console.log(myTree.createTree());console.log('前序遍历')ProOrderTraverse(myTree.createTree());console.log('中序遍历')InOrderTraverse(myTree.createTree());console.log('后续遍历')PostOrderTraverse(myTree.createTree());

登录后复制

 二叉树的非递归遍历

深度优先遍历(主要利用栈的先进后出)

广度优先遍历(主要利用队列的先进先出)

//深度优先非递归function DepthFirstSearch(biTree) {    let stack = [];    stack.push(biTree);    while (stack.length != 0) {        let node = stack.pop();        console.log(node.data);        if (node.rChild) {            stack.push(node.rChild);        }        if (node.lChild) {            stack.push(node.lChild);        }    }}//广度优先非递归function BreadthFirstSearch(biTree) {    let queue = [];    queue.push(biTree);    while (queue.length != 0) {        let node = queue.shift();        console.log(node.data);        if (node.lChild) {            queue.push(node.lChild);        }        if (node.rChild) {            queue.push(node.rChild);        }    }}

登录后复制

深度优先主要是利用栈,先压右子树,再压左子树

广度优先主要利用队列,先入左子树,再入右子树

深度优先的遍历结果与前序遍历相同ABDGHCEIF,广度优先的遍历结果是 ABCDEFGHI

2、创建二叉树

1中创建二叉树的方式过于笨拙,假入我们根据完全二叉树的模型建立自己的二叉树,空数据的地方用#表示,如下图所示我们称之为扩展二叉树,我们取其前序遍历的序列 AB#D##C##。

javascript如何实现二叉树的创建和遍历?(代码示例)

上代码:也是利用递归

//前序遍历得到的字符串let strArr = 'AB#D##C##'.split('');function BiTree(ele) {    this.data = ele;    this.lChild = null;    this.rChild = null;}var newTree = new BiTree('#');function createBiTree(biTree) {    if (strArr.length == 0) return;    let str = strArr.shift();    if (str == '#') return;    biTree.data = str;    if (strArr[0] != '#') {        biTree.lChild = new BiTree('#')    }    createBiTree(biTree.lChild);    if (strArr[0] != '#') {        biTree.rChild = new BiTree('#')    }    createBiTree(biTree.rChild);}createBiTree(newTree);console.log(newTree);ProOrderTraverse(newTree)

登录后复制

你也可以用中序遍历或者后序遍历实现二叉树的创建,代码里生成结点和构建左右子树的代码顺序交换一下就行了

推荐教程:《JavaScript视频教程》

以上就是javascript如何实现二叉树的创建和遍历?(代码示例)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2726713.html

(0)
上一篇 2025年3月7日 23:34:35
下一篇 2025年3月7日 09:33:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 详解JavaScript之作用域

    作用域是可访问变量的集合。 JavaScript 作用域 在 JavaScript 中, 对象和函数同样也是变量。 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 立即学习“Java免费学习笔记(深入)”; Java…

    2025年3月7日
    200
  • 关于JavaScript监听组合按键

    推荐:《javascript入门教程》 1.思路       如图,通过监听并打印键盘keydown事件,得到图示内容,观察发现, 当按下的组合键包含Ctrl键时,ctrlKey键会显示为true; 立即学习“Java免费学习笔记(深入)”…

    2025年3月7日
    200
  • JavaScript的split()方法有什么用?

    split()方法用于把一个字符串分割成字符串数组,并返回。语法“string.split(separator,limit)”,其中separator参数指定分割字符串的位置,如果值为空字符串 (“”) ,则字符串每…

    2025年3月7日 编程技术
    200
  • js怎么替换字符串?

    在js中,可以使用str.replace()方法来替换字符串。replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串;然后返回一个新的字符串。 replace() 方法用于在字符串中用一些字符替换另一…

    2025年3月7日
    200
  • 总结javascript中遍历数组的几种方法

    本篇文章给大家总结了一些javascript遍历数组的几种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 有几种方法可以遍历数组,下面将逐个罗列! while循环 let index = 0;const array …

    2025年3月7日 编程技术
    200
  • 深入分析JavaScript的Module模式编程

    基础知识 首先我们要大概了解一下Module模式(2007年由YUI的EricMiraglia在博客中提出),如果你已熟悉 Module 模式,可以跳过本部分,直接阅读”高级模式”。 相关学习推荐:javascrip…

    2025年3月7日
    200
  • Javascript PJAX 原理和使用

    pjax 即 pushState + ajax,它被封装成了一个 jQuery 扩展以方便使用。pjax 主要用来解决 HTML 页面局部刷新 url 不更新和不支持后退和前进的问题,提升用户体验。 pjax原理 pjax 的实现是利用 H…

    2025年3月7日
    200
  • 前端工程师需要掌握哪些知识?

    前端工程师需要掌握哪些知识? 1、能熟练使用HTML、CSS、Javascript,主要工作还是搭建静态页面; 2、学习Bootstrap、jQuery之类,以及AJAX技术; 3、学习进阶框架Angular、Vue、React等。 立即学…

    2025年3月7日
    200
  • javascript警告是什么意思

    javascript警告是弹出警告框的意思,设置方法为:首先在浏览器中按f12,打开控制台;然后在输入框输入【alert(‘警告弹出’)】,并按回车即可 。 javascript中,alert()是弹出警告框的意思。…

    2025年3月7日 编程技术
    200
  • javascript向PHP传递中文乱码怎么办

    javascript向PHP传递中文乱码的解决方法:首先在javascript代码中用【encodeURIComponent()】函数处理中文字符串;然后保证JavaScript和Asp、Php等后端程序间传值编码统一即可。 javascr…

    2025年3月7日
    200

发表回复

登录后才能评论