## javascript - 二叉树 转

huangjacky

``````/**
* Created by huangjacky on 14-10-3.
*/
function Node(element, left, right) {
this.element = element;
this.level = 0;
this.left = left;
this.right = right;
}

function BST() {
this.root = null;
}
BST.prototype = {
insert: function (element) {
var n = new Node(element, null, null);
if (this.root == null) {
this.root = n;
n.level = 0;
return true;
} else {
var current = this.root;
var parent = null;
while (current != null) {
if (element < current.element) {
parent = current;
current = current.left;
} else if (element > current.element) {
parent = current;
current = current.right;
} else {
return false;
}
}
n.level = parent.level + 1;
if (element < parent.element) {
parent.left = n;

} else {
parent.right = n;
}
return true;
}
}, toString: function () {
return this.inOrder(this.root, function (n) {
return "\t" + n.element + '(' + n.level + ")\t";
});
}, inOrder: function (n, fn) {// 中序遍历
if (!n) {
return '';
} else {
return this.inOrder(n.left, fn) + fn(n) + this.inOrder(n.right, fn);
}
}, preOrder: function (n, fn) { // 先序遍历
if (!n) {
return '';
} else {
return fn(n) + this.preOrder(n.left, fn) + this.preOrder(n.right, fn);
}
}, postOrder: function (n, fn) {// 后序遍历
if (!n) {
return '';
} else {
return this.postOrder(n.left, fn) + this.postOrder(n.right, fn) + fn(n);
}
}
};

var a = new BST();
a.insert(3);
a.insert(1);
a.insert(5);
a.insert(2);
a.insert(4);
console.log("inorder: " + a.toString());

var fn = function (n) {
return "\t" + n.element + '(' + n.level + ")\t";
};
var s1 = a.preOrder(a.root, fn);
var s2 = a.postOrder(a.root, fn);
console.log("pre order:" + s1);
console.log("post order:" + s2);``````

### huangjacky

10/30
0
0
JavaScript实现排序二叉树的基本操作

a独家记忆
06/29
0
0
JavaScript专题之递归

JavaScript 专题系列第十八篇，讲解递归和尾递归 定义 程序调用自身的编程技巧称为递归(recursion)。 阶乘 以阶乘为例： 示意图(图片来自 wwww.penjee.com)： 斐波那契数列 在《JavaScript专...

2017/09/13
0
0

ssthouse_hust
09/16
0
5
js vis vue 实现AVL树

AVL树,插入和删除节点, 不同的旋转实现 参考 http://blog.csdn.net/zhangxiangdavaid/article/details/37115355 js: 二叉树的三种遍历递归实现与非递归实现,删除采用中序遍历重新创建.....懒...

2017/11/01
0
0

makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程，应该不能算是一个合格的专业程序员，至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

27分钟前
6
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

lanyu96
39分钟前
1
0

linuxCool

24
0
Python程序员需要知道的30个技巧

1 直接交换两个数字位置 1x, y = 10, 202print(x, y)3x, y = y, x4print(x, y)5#1 (10, 20)6#2 (20, 10) 2 比较运算符的链接 1n = 102result = 1 < n < 203print(result)4# True5result = 1 ......

13
0