JavaScript之树结构的示例分析

  介绍

这篇文章主要介绍了JavaScript之树结构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

<强>二叉树

<强>——概念——

二叉树是一种树形结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

如下,就是一棵二叉树(注:下文二叉树相关例子,都以该二叉树为例):

 JavaScript之树结构的示例分析

且,遍历二叉树(遍历二叉树)有三种常用方式,如下:

<强> 1),先序遍历二叉树(根左右),,

,,,,,,,若二叉树为空,则空操作,否则

,,,,,,,——访问根结点;

,,,,,,,——先序遍历左子树;

,,,,,,,——先序遍历右子树。

例如,上述例子中的二叉树,遍历结果如下:

 JavaScript之树结构的示例分析

<强> 2),中序遍历二叉树(左根右)

,,,,,,,,若二叉树为空,则空操作,否则

,,,,,,,,——中序遍历左子树;

,,,,,,,,——访问根结点;

,,,,,,,,——中序遍历右子树。

例如,上述例子中的二叉树,遍历结果如下:

 JavaScript之树结构的示例分析

<强> 3),后序遍历二叉树(左右根)

,,,,,,,若二叉树为空,则空操作,否则

,,,,,,,——后序遍历左子树;

,,,,,,,——后序遍历右子树;

——访问根结点。

例如,上述例子中的二叉树,遍历结果如下:

 JavaScript之树结构的示例分析

好了,了解了二叉树以及遍历方式,那么,接下来我们就一起用JavaScrip来实现下吧,当然采用链式存储结构。

<强>首先强,利用JavaScript构造函数建立二叉树结点,如下:

function  TreeNode () {=,this.data 零;//该节点数据=,this.lchild 零;//左子树=,this.rchild 零;//右子树,   };

<>强然后强,我们可以通过遍历二叉树的算法,构建一棵二叉树,如下,采用先序序列建立一棵二叉树方法:

/*   *方法:采用先序序列建立二叉树   * @params:节点列表(数组),——树节点,以先序序列存入数组中,零代表空节点   */时间=TreeNode.createBiTree 函数(节点列表){   ,var 小姐:=,0;   ,return  (function  getNode () {   ,var  node =,空,=,val 节点列表(+ +);   ,如果(val) {=,node 零;   ,其他}{=,,node  new  TreeNode ();=,,node.data  val;=,,node.lchild  getNode ();=,,node.rchild  getNode ();   ,}   ,return 节点;   ,})();   };

<>强最后强,就是遍历一棵二叉树咯,分别为先序遍历(PreOrderTraverse),中序遍历(InOrderTraverse)以及后序遍历(PostOrderTraverse),如下:

TreeNode.prototype =, {   构造函数:大敌;TreeNode,   ,_PreOrderTraverse:函数(节点){   ,如果(节点){   ,console.log (node.data);   ,this._PreOrderTraverse (node.lchild);   ,this._PreOrderTraverse (node.rchild);   ,}   },   ,PreOrderTraverse:函数(){   ,console.log(& # 39;预订:& # 39;);   ,this._PreOrderTraverse(这个);   },   ,_InOrderTraverse:函数(节点){   ,如果(节点){   ,this._InOrderTraverse (node.lchild);   ,console.log (node.data);   ,this._InOrderTraverse (node.rchild);   ,}   },   ,InOrderTraverse:函数(){   ,console.log(& # 39;有条不紊地进行:& # 39;);   ,this._InOrderTraverse(这个);   },   ,_PostOrderTraverse:函数(节点){   ,如果(节点){   ,this._PostOrderTraverse (node.lchild);   ,this._PostOrderTraverse (node.rchild);   ,console.log (node.data);   ,}   },   ,PostOrderTraverse:函数(){   ,console.log(& # 39;后缀次序:& # 39;);   ,this._PostOrderTraverse(这个);   ,}   };

好了,利用上述二叉树例子,我们可以自行测试下:

var  treeNode =,空,=,nodeList [& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;,,空,,空,,& # 39;d # 39;,, & # 39; e # 39;,,空,,& # 39;舌鳎# 39;,,空,,空,,& # 39;f # 39;,,空,,空,,空);//getting  a  binary  tree 得到节点列表   时间=treeNode  TreeNode.createBiTree(节点列表),,//traversing 从而tree  of  treeNode//ABCDEGF treeNode.PreOrderTraverse ();//CBEGDFA treeNode.InOrderTraverse ();   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

JavaScript之树结构的示例分析