javascript生成二叉树, 以及其前中后序遍历
2020-04-05 07:16
645 查看
序言
最近看了些面试题, 发现大多数都会问一个问题就是JavaScript生成二叉树, 本来想偷懒百度看看算了, 可是发现好多网站博客的代码都是一样的, 并且生成的还是平衡二叉树………. 如果我不输入数字你给我生成一个试试. so, 看起来只能自己搞一下了.
我之前写过一篇基于C++的二叉树创建以及遍历方法, 本片博客算法就是基于之前的C++语言的改版. 附上链接: https://www.geek-share.com/detail/2687629751.html
生成二叉树的格式:
代码
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function MyNode(value = '', left = null, right = null) { this.root = value; this.left = left; this.right = right; } let i = 0 function createTree(data, node = null) { if (i >= data.length) return null if (data[i] === '#') { i++; return null; } // 由于js没有指针和引用, 没法在递归的函数里设置上一步递归的左右子树, 只能先创建一个对象把地址先分配好. 因此这样创建完会有一个弊端, 二叉树的叶子节点上多了这些的空节点. 如果你有好的建议可以留言, 或者私信我. let left = new MyNode(null, null, null); let right = new MyNode(null, null, null); if (node === null) { node = new MyNode(data[i], left, right); } else { node.root = data[i]; node.left = left; node.right = right; } i++ createTree(data, node.left); createTree(data, node.right); return node } let data = []; // rl.question('请输入想要创建的二叉树', (answer) => { // data = answer.split(''); // console.log(createTree(data)) // rl.close(); // }); // 我嫌每次输入麻烦就写死了 data = 'GDA##FE###MH##Z###'.split(''); let result = createTree(data); show_DLR(result) function show_DLR(result) { let stack = [], queue = []; let now = result; while(now.root !== null || queue.length !== 0) { if(now.root !== null) { // 遍历左子树 stack.push(now); // 分别将二叉树的结点压入栈和队列中 queue.push(now); now = now.left; } else { console.log(queue.shift().root)// 注意此时弹出的为队列中的第一个元素 now = stack.pop().right; } } } // 偷懒了...... 其余的几种的遍历请参考序言中提到的博客链接 // https://www.geek-share.com/detail/2687629751.html // 我的这篇博客是C++写的, 但是逻辑你可以copy过来
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- java 二叉树的遍历 为什么只给出前序以及后序遍历,不能生成唯一的二叉树
- 二叉树前中后序递归/非递归遍历以及按层遍历
- 生成二叉树以及遍历(简单易懂)
- 数据结构试验报告---二叉树的生成,遍历二叉树(递归前中后,非递归前中后)
- 为什么只给出前序以及后序遍历,不能生成唯一的二叉树
- javascript实现二叉树排序,前中后序遍历,最大最小值特定值查询以及删除节点
- 二叉树的建立,以及递归前中后序遍历二叉树
- 二叉树的迭代前中后遍历以及不用栈的遍历C语言
- 二叉树中结构体的应用,以及先序,中序,后序,层次遍历的输出
- 二叉树的建立以及遍历
- 【二叉树】层次遍历二叉树以及判断一棵树是否是完全二叉树
- 二叉树的先序以及后序递归建立,先中后序递归遍历。
- 二叉树建立 以及 bfs层次遍历
- C++ 二叉树的创建以及遍历
- javascript中的 类初始化,遍历for in 以及with的用法
- 笔试常见问题之子网掩码计算和二叉树的前中后遍历
- 二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
- JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
- 二叉树的创建以及遍历
- C++二叉树的前序建立与前中后遍历