学习前端已经有段时间了,也开始想写点什么了。
今天是第一篇文章,用JS写一个二叉树算法。
首先介绍一下二叉树,完整定义可以去维基百科,我这里粗略介绍一下主要内容。
二叉树作为树的一种,是一种重要的数据结构,常见的二叉树有:
满二叉树:除叶子结点外,所有结点都有两个结点,叶子结点的left,right为NULL
哈夫曼树:又称为最优二叉数,是一种带权路径最短的树。哈夫曼编码就是哈夫曼树的应用,可以用来进行编码压缩.哈夫曼树的构造见哈夫曼树的构造
完全二叉树:除了最底层的叶子结点之外,其余层全满,而且叶子层集中在左端。堆是一种特殊的完全二叉树(全满或者差一个结点就全满)
平衡二叉树:所谓平衡二叉树指的是,左右两个子树的高度差的绝对值不超过 1。包括AVL树,红黑树.
红黑树:具体见红黑树问题
今天写个比较简单的排序二叉树,算法部分代码如下:
function BinaryTree(){
var Node = function(key){
this.key = key;
this.left = null;
this.right = null;
}
var root = null;
var insertNode = function(node,newNode){
if(newNode.key < node.key){
if(node.left === null){
node.left = newNode;
}else{
insertNode(node.left,newNode)
}
}else{
if(node.right === null){
node.right = newNode;
}else{
insertNode(node.right,newNode);
}
}
}
this.insert = function(key){
var newNode = new Node(key);
if(root === null){
root = newNode;
}else{
insertNode(root,newNode);
}
}
}
测试代码如下:
var myprint = function(node){
if(node != null) {
console.log(node.key);
myprint(node.left);
myprint(node.right);
}else{
console.log("0");
}
}