本文阐述了JavaScript数据结构的二叉树遍历算法和算法。分享给大家参考,如下:
Javascript数据结构和算法-二叉树遍历(一阶)
顺序遍历首先访问根节点,然后以同样的方式访问左子树和右子树
代码如下:
/* *在二叉树中,相对较小的值保存在左侧节点,较大的值保存在右侧节点* * * *//*用于生成节点*/函数节点(数据,左,右){this。数据=数据;//存储在节点中的数据是this.left=leftthis.right=右;this.show=show}函数show() {返回this.data}/*用于生成二叉树*/函数BST(){ this . root=null;this.insert=insert}/*将数据插入二叉树(1)让根节点成为当前节点。(2)如果待插入节点保存的数据小于当前节点,则将新的当前节点设置为原节点的左节点;相反,转到第4步。(3)如果当前节点的左节点为空,将新节点插入该位置并退出循环;否则,继续执行下一个循环。(4)将新的当前节点设置为原节点的右节点。(5)如果当前节点的右节点为空,将新节点插入该位置并退出循环;否则,继续执行下一个循环。* */函数插入(数据){ 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){//如果当前节点的左节点为null,则将新节点插入此位置并退出循环;否则,继续执行下一个while循环。parent . left=n;打破;} } else { current=current.right//如果要插入的节点保存的数据小于当前节点,则让新的当前节点作为左节点if (current==null) {parent。右=n;打破;}}}}}/*一阶遍历*用递归方法*/函数preOrder(node) {if(!(node==null)){ console . log(node . show()' ');preOrder(node . left);preOrder(node . right);}}/*测试代码*/var nums=new BST();nums . insert(23);nums . insert(45);nums . insert(16);nums . insert(37);nums . insert(3);nums . insert(99);nums . insert(22);Console.log('先遍历: ');preOrder(nums . root);运行结果:
Javascript数据结构和算法-二叉树遍历(中间顺序)
中间顺序遍历根据节点上的键值以升序访问BST上的所有节点
代码如下:
/* *在二叉树中,相对较小的值保存在左侧节点,较大的值保存在右侧节点* * * *//*用于生成节点*/函数节点(数据,左,右){this。数据=数据;//存储在节点中的数据是this.left=leftthis.right=右;this.show=show}函数show() {返回this.data}/*用于生成二叉树*/函数BST(){ this . root=null;this.insert=insert}/*将数据插入二叉树(1)让根节点成为当前节点。(2)如果待插入节点保存的数据小于当前节点,则将新的当前节点设置为原节点的左节点;相反,转到第4步。(3)如果当前节点的左节点为空,将新节点插入该位置并退出循环;否则,继续执行下一个循环。(4)将新的当前节点设置为原节点的右节点。(5)如果当前节点的右节点为空,将新节点插入该位置并退出循环;否则,继续执行下一个循环。* */函数插入(数据){ 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){//如果当前节点的左节点为null,则将新节点插入此位置并退出循环;否则,继续执行下一个while循环。parent . left=n;打破;} } else { current=current.right//如果要插入的节点保存的数据小于当前节点,则让新的当前节点作为左节点if (current==null) {parent。右=n;打破;}}}}}/*使用递归方法*/函数inOrder(node) {if(!(node==null)){ Inorder(node . left);console . log(node . show()' ');inoder(node . right);}}/*测试代码*/var nums=new BST();nums . insert(23);nums . insert(45);nums . insert(16);nums . insert(37);nums . insert(3);nums . insert(99);nums . insert(22);Console.log('以中间顺序遍历: ');inOrder(nums . root);运行结果:
Javascript数据结构和算法-二叉树遍历(后序列)
后顺序遍历首先访问叶节点,从左子树到右子树,然后到根节点。
/* *在二叉树中,相对较小的值保存在左侧节点,较大的值保存在右侧节点* * * *//*用于生成节点*/函数节点(数据,左,右){this。数据=数据;//存储在节点中的数据是this.left=leftthis.right=右;this.show=show}函数show() {返回this.data}/*用于生成二叉树*/函数BST(){ this . root=null;this.insert=insert}/*将数据插入二叉树(1)让根节点成为当前节点。(2)如果待插入节点保存的数据小于当前节点,则将新的当前节点设置为原节点的左节点;相反,转到第4步。(3)如果当前节点的左节点为空,将新节点插入该位置并退出循环;否则,继续执行下一个循环。(4)将新的当前节点设置为原节点的右节点。(5)如果当前节点的右节点为空,将新节点插入该位置并退出循环;否则,继续执行下一个循环。* */函数插入(数据){ 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){//如果当前节点的左节点为null,则将新节点插入此位置并退出循环;否则,继续执行下一个while循环。parent . left=n;打破;} } else { current=current.right//如果要插入的节点保存的数据小于当前节点,则让新的当前节点作为左节点if (current==null) {parent。右=n;打破;}}}}}/*按以下顺序遍历*使用递归方法*/函数postOrder(节点){if(!(node==null)){ PostOrder(node . left);posterorder(node . right);console . log(node . show()' ');}}/*测试代码*/var nums=new BST();nums . insert(23);nums . insert(45);nums . insert(16);nums . insert(37);nums . insert(3);nums . insert(99);nums . insert(22);Console.log('在序列后遍历: ');post ORder(nums . root);运行结果:
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun来测试上述代码的运行效果。
更多对JavaScript相关内容感兴趣的读者可以查看本网站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》和0103010
希望本文对JavaScript编程有所帮助。