都是些简单的东西,所以直接上代码了。

  1. /**
  2. * Created by huangjacky on 14-10-3.
  3. */
  4. function Node(element, left, right) {
  5. this.element = element;
  6. this.level = 0;
  7. this.left = left;
  8. this.right = right;
  9. }
  10.  
  11. function BST() {
  12. this.root = null;
  13. }
  14. BST.prototype = {
  15. insert: function (element) {
  16. var n = new Node(element, null, null);
  17. if (this.root == null) {
  18. this.root = n;
  19. n.level = 0;
  20. return true;
  21. } else {
  22. var current = this.root;
  23. var parent = null;
  24. while (current != null) {
  25. if (element < current.element) {
  26. parent = current;
  27. current = current.left;
  28. } else if (element > current.element) {
  29. parent = current;
  30. current = current.right;
  31. } else {
  32. return false;
  33. }
  34. }
  35. n.level = parent.level + 1;
  36. if (element < parent.element) {
  37. parent.left = n;
  38.  
  39. } else {
  40. parent.right = n;
  41. }
  42. return true;
  43. }
  44. }, toString: function () {
  45. return this.inOrder(this.root, function (n) {
  46. return "\t" + n.element + '(' + n.level + ")\t";
  47. });
  48. }, inOrder: function (n, fn) {// 中序遍历
  49. if (!n) {
  50. return '';
  51. } else {
  52. return this.inOrder(n.left, fn) + fn(n) + this.inOrder(n.right, fn);
  53. }
  54. }, preOrder: function (n, fn) { // 先序遍历
  55. if (!n) {
  56. return '';
  57. } else {
  58. return fn(n) + this.preOrder(n.left, fn) + this.preOrder(n.right, fn);
  59. }
  60. }, postOrder: function (n, fn) {// 后序遍历
  61. if (!n) {
  62. return '';
  63. } else {
  64. return this.postOrder(n.left, fn) + this.postOrder(n.right, fn) + fn(n);
  65. }
  66. }
  67. };
  68.  
  69. var a = new BST();
  70. a.insert(3);
  71. a.insert(1);
  72. a.insert(5);
  73. a.insert(2);
  74. a.insert(4);
  75. console.log("inorder: " + a.toString());
  76.  
  77. var fn = function (n) {
  78. return "\t" + n.element + '(' + n.level + ")\t";
  79. };
  80. var s1 = a.preOrder(a.root, fn);
  81. var s2 = a.postOrder(a.root, fn);
  82. console.log("pre order:" + s1);
  83. console.log("post order:" + s2);

javascript - 二叉树的更多相关文章

  1. javascript二叉树

    javascript中的二叉树一(binary tree) 毕业也快2年了,毕业之后就没有认真写过博客了,都是那里学习一下,这里弄一下.学习了也不做笔记,过后就忘记了.我对这种状态打从心里是讨厌的. ...

  2. javascript二叉树基本功能实现

    都是常用的功能. 删除是最复杂的.. <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  3. javascript数据结构与算法-- 二叉树

    javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...

  4. 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java

    前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...

  5. JavaScript 实现二叉树

    JavaScript 实现二叉树: // JavaScript 实现二叉树 function BinaryTree () { var Node = function (key) { this.key ...

  6. javascript数据结构与算法---二叉树(删除节点)

    javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...

  7. javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)

    javascript数据结构与算法---二叉树(查找最小值.最大值.给定值) function Node(data,left,right) { this.data = data; this.left ...

  8. JavaScript实现二叉树算法

    二叉树的遍历方式 分别为中序遍历(左子树->当前节点->右子树).前序遍历(当前节点->左子树->右子树).后序遍历(左子树->右子树->当前节点).下面使用Jav ...

  9. javascript数据结构与算法--二叉树遍历(后序)

    javascript数据结构与算法--二叉树遍历(后序) 后序遍历先访问叶子节点,从左子树到右子树,再到根节点. /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ ...

随机推荐

  1. UIView的剖析(转)

    转自:http://blog.csdn.net/mengtnt/article/details/6716289 前面说过UIViewController,但是UIView也是在MVC中非常重要的一层  ...

  2. java实验一 20135104刘帅

    实验报告 一.实验目的与要求: 实验目的: 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 实验要求: 1.没有Linux基础的同学建议先学习 ...

  3. 开关电源-BUCK

    DCDC  称为直流直流变换,将直流电进行斩波,形成脉动的直流电压,最后经过储能,滤波电路留平滑输出,使得输出为直流电.在这期间运用PWM或PFM调制方法.(PWM:pulse width       ...

  4. 从RTSP协议SDP数据中获得二进制的SPS、PPS

    在RTSP协议的交互过程中,第二步客户端发送DESCRIBE请求之后,服务端会返回SDP内容,该SDP内容中有关于媒体和会话的描述,本篇文章主要给出如何从SDP字符串中得到H264视频信息中的sps. ...

  5. C#设计模式总结

    一.引言 经过这段时间对设计模式的学习,自己的感触还是很多的,因为我现在在写代码的时候,经常会想想这里能不能用什么设计模式来进行重构.所以,学完设计模式之后,感觉它会慢慢地影响到你写代码的思维方式.这 ...

  6. python __setattr__, __getattr__, __delattr__, __call__

    python __setattr__, __getattr__, __delattr__, __call__ getattr `getattr`函数属于内建函数,可以通过函数名称获取 value = ...

  7. [ucgui] 对话框6——触屏位置简单例子

    >_<:直接调用函数获得触屏位置: xPhys = GUI_TOUCH_GetxPhys(); /* Get the A/D mesurement result in x */ yPhys ...

  8. C++ 泛型算法

    <C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛 ...

  9. 使用grunt打包ueditor源代码

    支持版本支持 UEditor 1.3.0+ 的版本 使用方法1.线上下载ueditor下载地址:ueditor,要下载"完整版 + 源码" 2.安装nodejs下载nodejs并安 ...

  10. Mac直播服务器Nginx配置对HLS的支持

    在上一篇中Mac上搭建直播服务器Nginx+rtmp,我们已经搭建了nginx+rtmp直播服务器.下面需要对Nginx服务器增加对HLS的支持.在Nginx增加对HLS种支持比较简单,只是简单的修改 ...