结点:

function Node(data, left, right) {this.data = data;this.left = left;this.right = right;this.show = show;
}

显示树的数据:

function show(){return this.data;
}

二叉查找树:

// Binary Search Tree
function BST(){this.root = null;this.insert = insert;
}

添加结点到二叉树:

function insert(data){let n = new Node(data, null, null)if(this.root == null){this.root = n;}else{let current = this.root;let parent;while(true){parent = current;if(data < current.data){current = current.left;if(current == null){parent.left = n;breakk}}else{current = current.rightif(current == null){parent.right = n;break;}}}}
}

生成二叉查找树:

function genBST(list){if(list.length>0){let t = new BST();list.forEach((data)=>{t.insert(data);})return t}
}
let list = [2,3,4,1];
console.log(genBST(list));

先序遍历:

function DLR(t){if(t.root !== undefined){console.log(t.root.data);if(t.root.left !== null){DLR(t.root.left)}if(t.root.right!==null){DLR(t.root.right)}}else{if(t !== null){console.log(t.data);if(t.left !== null){DLR(t.left)}if(t.right!==null){DLR(t.right)}}}
}let list = [1,2,3,6,5,4];
let t = genBST(list);
DLR(t);


中序遍历:

function LDR(t){if(t.root !== undefined){if(t.root.left !==null){LDR(t.root.left)}console.log(t.root.data);if(t.root.right !== null){LDR(t.root.right)}}else{if(t !==null){if(t.left !== null){LDR(t.left);}console.log(t.data);if(t.right !== null){LDR(t.right);}}}
}let list = [1,2,3,6,5,4];
let t = genBST(list);
LDR(t);


后续遍历:

function LRD(t){if(t.root !== undefined){if(t.root.left !==null){LRD(t.root.left)}if(t.root.right !== null){LRD(t.root.right)}console.log(t.root.data);}else{if(t !==null){if(t.left !== null){LRD(t.left);}if(t.right !== null){LRD(t.right);}console.log(t.data);}}
}let list = [1,2,3,6,5,4];
let t = genBST(list);
LRD(t);

参考https://github.com/zoro-web/blog/issues/4

算法 --- 二叉树查找树的先序(中序、后序)遍历的js实现相关推荐

  1. 二叉树的操作(前,中,后序遍历也叫深度优先遍历,非空结点的个数)递归实现

    定义一个二叉树的结点 二叉树的前序遍历, 先访问根结点,再访问左,再访问右. 每次访问都要先看根结点是否为空,然后打印根结点,把此时根结点的左结点作为下一次递归的根结点,当把左结点遍历完后,再遍历右结 ...

  2. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

  3. 非递归先、中、后序遍历二叉树(C语言)

    文章目录 前言 一.二叉树非递归遍历算法 1.先序遍历 2.中序遍历 3.后序遍历 二.完整程序 三.运行结果实例 前言 本程序采用C语言编写,栈和二叉树的基本操作函数基于严蔚敏老师的<数据结构 ...

  4. 二叉树遍历方法——前、中、后序遍历(图解)

    目录 一.前序遍历 (1)递归版本 (2)非递归版本 二.中序遍历 (1)递归版本 (2)非递归版本 三.后序遍历 (1)递归版本 (2)非递归版本 四.总结 五.测试程序 六.程序输出 二叉树的遍历 ...

  5. PAT甲级1020 Tree Traversals:[C++题解]树的遍历、由中序序列和后序序列递归建树

    文章目录 题目分析 题目链接 题目分析 题意重述:给定一棵二叉树的后序遍历序列和中序遍历序列,让求层次遍历的序列. 分析: 后序遍历:先 左子树.右子树 ,最后再遍历根结点. 中序遍历:先左子树,再根 ...

  6. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)

    7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...

  7. 二叉树的构造(前序+中序)---(后序 + 中序)

    二叉树的构造(前序+中序)-(后序 + 中序) 思路:要对前序+中序(后序+中序)的构建树的动态过程要了解,思路比较简单,在了解了这个过程之后,理解下面代码就容易了. 过程 参考图: 前序 + 中序: ...

  8. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  9. 二叉树的前、中、后序遍历

    所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础. 二 ...

最新文章

  1. 使用lucene进行group操作
  2. 【渗透测试】初探进程伪装
  3. Python第三、四种数据类型——List(列表) and Tuple(元组)
  4. onclick函数的导包问题
  5. iOS之深入解析dyld与ObjC关联的底层原理
  6. MyBatis传入参数为List对象
  7. DHCP服务_学习笔记
  8. Java同步锁——lock与synchronized 的区别【转】
  9. 嵌入式 boa服务器移植
  10. 如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程
  11. 史上最经典CAP讲解
  12. Win7 32位下DebugView和DriverMinitor不能打印调试信息的问题
  13. 如果我已经开始重新设置基准,如何将两个提交合并为一个?
  14. 2013-01-09 13:31 IE不支持textarea的maxlength属性,Firefox支持
  15. 解决stackoverflow加载慢的插件
  16. 如何不用u盘将32位Windows转为64位Windows
  17. 生活中哪些地方运用计算机网络,计算机网络技术在生活中应用.doc
  18. vue和 element ui下载到本地后引入
  19. Hadoop生态系统
  20. 毕业设计-基于微信小程序的校园跑腿互助系统

热门文章

  1. robot ride edit 页面不显示_【框架】robot-framework预研
  2. python xpath定位元素方法_Python爬虫杂记 - Xpath高级用法
  3. 程序员如何跟领导提离职_如何优雅地跟老板提加薪?按照这3个步骤来,也不是什么难事...
  4. java 字符串是对象吗_解析Java中的String对象的数据类型
  5. macpro台式计算机,Mac Pro正式上架 真的可以用来刨土豆丝
  6. 汇编语言属于C语言吧,汇编语言和c语言的区别是什么
  7. shutil.rmtree()
  8. Switch语句的参数是什么类型的?
  9. 解除服务器端口号占用及服务器端口号的修改
  10. 关于box-shadow属性的一点心得