javascript数据结构系列(六)-二叉树(2)
2017-09-14 15:03
225 查看
遍历二叉树和线索二叉树
遍历二叉树
在二叉树的一些应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理。这就提出了一个遍历二叉树的问题,即如何按照某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。基于二叉树的递归定义,可得下属遍历二叉树的递归算法定义:
先序遍历二叉树的操作定义为:
若二叉树为空,则空操作,否则:
访问根结点
先序遍历左子树
先序遍历右子树
中序遍历二叉树的操作定义为:
若二叉树为空,则空操作,否则:
中序遍历左子树
访问根结点
中序遍历右子树
后序遍历二叉树的操作定义为:
若二叉树为空,则空操作,否则:
后序遍历左子树
后序遍历右子树
访问根结点
遍历实现
//先序遍历 function preOrderTraverse(node){ if(!(node === null)){ console.log(node.show()); preOrderTraverse(node.lchild); preOrderTraverse(node.rchild); } }; // 中序遍历 function inOrderTraverse(node) { if(!(node == null)) { inOrderTraverse(node.lchild); console.log(node.show()); inOrderTraverse(node.rchild); } }; //后序遍历 function postOrderTraverse(node){ if(!(node === null)){ postOrderTraverse(node.lchild); postOrderTraverse(node.rchild); console.log(node.show()); } }; //查找最小值 function GetMin(T){ var current = T.root; //因为较小的值总是在左子树上 while(!(current.lchild === null)){ current = current.lchild; } return current.data; }; //查找最大值 function GetMax(T){ var current = T.root; while(!(current.rchild === null)){ current = current.rchild; } return current.data; }; //查找给定值 function searchData(T,data){ //先比较该值和当前结点的值的大小 var current = T.root; while(!(current === null)){ if(current.data === data){ return current; }else if(data < current.lchild){ current = current.lchild; }else{ current = current.rchild; }; } return null; };
删除实现
function remove(T,data){ root = removeNode(T.root,data); }; function getSmalllest(biNode){ if(biNode.lchild === null){ return biNode; }else{ return getSmalllest(biNode.lchild); } }; function removeNode(biNode,data){ if(biNode === null){ return null; } if(data === biNode.data){ //没有子结点的结点 if(biNode.lchild === null && biNode.rchild === null){ return null; } //没有左孩子的结点 if(biNode.lchild === null){ return biNode.rchild; } //没有右孩子的结点 if(biNode.rchild === null){ return biNode.lchild; } //有2个孩子的结点 var temNode = getSmalllest(biNode.rchild); biNode.data = temNode.data; biNode.rchild = removeNode(biNode.rchild,temNode.data); return biNode; }else if(data < biNode.data){ biNode.lchild = removeNode(biNode.lchild,data); return biNode; }else{ biNode.rchild = removeNode(biNode.rchild,data); return biNode; } };
相关文章推荐
- javascript数据结构系列(六)-树和二叉树(1)
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
- 数据结构C语言实现系列——二叉树
- javascript数据结构系列(三)-栈
- 重学数据结构系列之——二叉树基础
- JavaScript数据结构之二叉树的删除算法示例
- javascript数据结构系列(二)-线性表(1)
- 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java
- JavaScript数据结构之二叉树的计数算法示例
- JavaScript数据结构和算法之二叉树详解
- 数据结构C语言实现系列——二叉树[转]
- JavaScript中的数据结构及实战系列
- 【脚本语言系列】关于JavaScript数据结构,你需要知道的事
- javascript数据结构系列(五)-串
- 从零开始学_JavaScript_系列(44)——ES6新增数据结构:Set类型和WeakSet
- javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作
- 数据结构(二叉树系列)先序创建三种遍历和求深度(递归实现)
- javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作
- JavaScript数据结构之二叉树的遍历算法示例
- Javascript与数据结构系列(一)——栈的实现