二叉树
树:与阵列,链接列表,堆栈和队列(线性数据结构)不同,树是分层数据结构。
树词汇表:最顶层的节点称为树的根。直接位于元素下的元素称为子元素。直接在某个东西上方的元素称为其父元素。
为何选择树
1.使用树的一个原因可能是因为您希望存储自然形成层次结构的信息。例如,计算机上的文件系统:
file system
-----------
/ <-- root
/ \
... home
/ \
ugrad course
/ / | \
... cs101 cs112 cs113
2.树(具有一些排序,例如BST)提供适度的访问/搜索(比链接列表更快并且比数组慢)。
3.树提供适度的插入/删除(比阵列更快,比无序链接列表慢)。
4.与链接列表类似,与阵列不同,当节点使用指针链接时,树没有节点数量的上限。
树的主要应用包括:
1。处理分层数据。
2.使信息易于搜索(参见树遍历)。
3.处理已排序的数据列表。
4.作为合成视觉效果的数字图像的工作流程。
5.路由器算法
6.多阶段决策的形式(见商业象棋)。
二叉树: 一个树,其元素最多包含2个子元素,称为二叉树。由于二叉树中的每个元素只能有2个子元素,因此我们通常将它们命名为左右子元素。
demo
话不多说,代码奉上
function myBinaryTree(){
var Node = function(key){
//键值
this.key = key;
//左右孩子
this.leftNode = null;
this.rightNode = null;
}
var rootNode = null; // 根节点
var insertNode = function(node,newNode){
//新节点小于老节点的值,插在左边
if(newNode.key < node.key){
//如果是空,直接插入
if(node.leftNode === null){
node.leftNode = newNode;
}else{
//不为空,向其左孩子的新节点插入
insertNode(node.leftNode,newNode);
}
}else{
//与左孩子插入逻辑相同
if(node.rightNode === null){
node.rightNode = newNode;
}else{
insertNode(node.rightNode,newNode);
}
}
}
//插入节点
this.insert = function(key){
var newNode = new Node(key); //创建节点对象
if(rootNode === null){
rootNode = newNode; //创建根节点
}else{
insertNode(root,newNode); //插入节点
}
};
var nodes = [8,3,10,1,6,14,4,7,13];
var binaryTree = new myBinaryTree();
nodes.forEach(function(key){
binaryTree.insert(key);
});
}
之前有写过树的遍历:Mr.J--树的遍历方式详解
二叉树之所以重要,是因为它支持或拥有的操作,包括增删改查重要的操作,复杂度比完成同样功能的其他结构更低。