前言:
二叉树的特点(插图只是二叉树的一种情况,不要试图用插图来推理以下结论)
除了底层,每个节点都是父节点,每个节点最多有两个子节点。除了口上面的层,每个节点都是一个子节点,每个节点都会有一个父节点;顶层的节点(即图中的节点50)是根节点;
底层的节点称为叶节点,没有子节点;
父节点的左子节点值=右节点值
1节点的Javascript实现
//节点对象功能节点(数据,左,右){this。数据=数据;//节点值this.left=left//当前节点的左子节点是this,right=right;//当前节点的右子节点是this.show=show//辅助函数}函数show(){ return this . data;}感受实现上面节点的代码。感觉有点像链表,是不是?有当前值和下一个节点(左右子节点)的引用。以下是伪代码的草图:
二叉树的实现
要实现二叉树,当然要插入节点,形成二叉树。首先,看看js代码来实现二叉树
函数BST(){ this . root=null;this.insert=insert}函数插入(数据){ var n=new Node(数据,null,null);if(this . root==null){ this . root=n;} else { var current=this.rootvar父级;while(true){ parent=current;if(data current . data){ current=current . left;if(current==null){ parent . left=n;打破;} } else { current=current.rightif(current==null){ parent . right=n;打破;}}}}}然后看伪代码:
函数BST(){ this . root=null;//根节点this.insert=insert}函数插入(数据){//初始化一个节点。为什么要将左右子节点的引用初始化为空?因为它可能是一个叶节点,如果它有子节点,那么在下面的代码中将添加var n=new Node(data,null,null);If(如果二叉树是空的,如果是空的,根节点是空的,所以可以用根节点来判断二叉树是否是空的){//将当前节点保存为根节点this . root=n;} else {//当你来到这里,意味着二叉树不是空的。这里的关键是两个代码://0 . while(true);//1 . parent=current;//2 . current=current . left;/current=current . right;//3 . break;var current=this.rootvar父级;while(true){ parent=current;//获取父节点。如果是第一次循环,那么父节点就是根节点if (data current.data) {//如果当前节点值小于父节点,则保存在左边。记住二叉树的特点。如果小于父节点,则表示该节点属于父节点的左子树。current=current.leftif(current==null){ parent . left=n;打破;}//其实上面写的不太好理解,可以等效为下面的代码://startif (current。left==null){//如果左节点为空,那么这个空节点就是我们要插入的位置。current . left=n;打破;}else{ //如果不为空,继续在下一级查找空节点(插入位置)。current=current.left} //end} else {//右节点的逻辑代码与左节点的current=current.right相同;if(current==null){ parent . right=n;打破;}}}}}以下是更好理解的插入函数
函数插入(数据){ var n=新节点(数据,null,null);如果(这个。root==null){ this。root=n;} else { var current=this.root//开始更改while(true){ if(当前数据。数据){ if(当前。left==null){ current。左=n;打破;} else { current=current . left } } else { if(current。right==null){ current。右=n;打破;} else { current=current . right } } } }小结:
二叉树的实现的三个部件
结节对象
功能节点(数据,左,右){ 0.}BST对象
函数BST(){ 0.}插入节点函数
函数插入(数据){ 0.}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。