//二叉树
var Tree = function () {
var Node = function (value) {
this.value = value;
this.left = null;
this.rigth = null;
}
var root = null;
var insertNode = function (node, newnode) {
//往右走
if (newnode.value > node.value) {
if (node.right == null) {
node.right = newnode;
} else {
//递归
insertNode(node.right, newnode)
}
//往左走
} else if (newnode.value < node.value) {
if (node.left == null) {
node.left = newnode;
} else {
insertNode(node.left, newnode)
}
}
}
//插入
this.insert = function (value) {
var newnode = new Node(value);
if (root == null) {
root = newnode;
} else {
insertNode(root, newnode);
}
}
//遍历
var traverse = function (node, callback) {
if (node == null) return;
// callback(node.value); 先序遍历(根左右)
traverse(node.left, callback);
// callback(node.value); 中序遍历(左根右)
traverse(node.right, callback);
callback(node.value);//后序遍历(左右根)
}
this.traverse = function (callback) {
traverse(root, callback);
}
}
var t = new Tree;
t.insert(8);
t.insert(9);
t.insert(6);
t.insert(2);
var print = function (value) {
console.log('value-', value)
}
t.traverse(print);
---------------------------------------------------------------------------------------------------------------------------
(1)满二叉树
一颗二叉树的节点要么是叶子节点,要么它有两个子节点(如果一个二叉树的层数为K,且节点总数为(2^K)-1,则他就是满二叉树)
(2)完全二叉树
若二叉树的深度为K,除第K层外,其他各层(1~K-1)的节点数达到最大个数,除第K层的所有节点都连续集中在最左边,这就是完全二叉树。
(3)平衡二叉树
它或者是一颗空树,或是它的左子树和右子树的深度之差(平衡因子)的绝对之不超过1,且他的左子树和右子树都是一棵平衡二叉树。