赞
踩
树是一种非线性结构的有限集合。由n(n>=0)个节点组成。
如果n=0,是一棵空树。
如果n>0,说明至少有一个节点,这样的树有一个特殊的节点,这个节点没有父节点,称之为根节点(root)。
除根节点之外的节点又有m个互不相交的集合。其中每一个集合本身也是一棵树,称之为原树的子树。
节点:
每一片树叶就是一个节点,每个节点包含数据项,和指向其他节点的指针,如上图一共有11个节点。
节点的度:
节点所拥有的子树的数量。比如节点1就有3个度,分别为2,3,4;节点2就有2个度,分别为5,6;节点3只有一个度,为7;节点4也有3个度,分别为8,9,10;节点6也有一个度,为11。没有子树的度为0。
叶节点:
度为0的节点被成为叶节点。比如5,7,8,9,10,11。
分支节点:
除叶节点外的节点就是分支节点。比如1,2,3,4,6。
子女节点:
若一个节点有子树,那么子树就是这个节点的子女节点。比如2,3,4就是1的子女节点。
父节点:
与子女节点对应,若一个节点有子树,那么这个节点就是所有子树的父节点。比如1就是2,3,4的父节点。
兄弟节点:
同一个父节点的子女节点称为兄弟节点。
祖先节点:
从根节点到某节点上经过的所有节点都称为祖先节点,比如节点11的祖先节点就是1,2,6,11。
子孙节点:
某一个节点的子女节点,以及该节点的节点的子女节点,都是该节点的子女节点。比如对于节点2来说,节点5,6,11都是它的子孙节点。
节点所在层次:
在同一个水平线上的节点也在同一层。比如以上的树就有4层。节点1在第一层;节点2,3,4在第二层;节点5,6,7,8,9,10在第三层;节点11在第四层。
树的深度:
一棵树中距离根节点最远节点所在的层次就是树的深度。其实也就是一棵树有多少层就是一棵树的深度。本例中的树的深度为4。
树的高度:
叶节点(没有子女节点)的高度为1,非叶节点的高度是它子女节点高度的最大值+1,高度与深度数值相等。计算方式不一样。
树的度:
一棵树中节点的最大值。如本例中所有节点的最大值是3,树的度就是3。
有序树:
一棵树中,各个子树的节点是有次序的,第一颗树节点1,第二颗是节点2,就叫做有序树。
无序树:
跟有序树正好相反,树中节点的次序不是有序的,可以互换位置,叫做无序树。
森林:
森林是m(m>=0)棵树的集合。
二叉树是一棵特殊的树,它的特征之一是一个节点最多有2个子女节点。如果有2个节点,称为左子女和右子女,且次序不能颠倒。每一层都到达了最大数量节点的二叉树为满二叉树,也就是每个节点都有左右两个子女节点。第k层,或是满的或是从右向左连续缺若干个节点称为完全二叉树。
如下图,通过数组来实现二叉树(蓝色的表示索引值)。
父节点索引值 * 2+1=左子女节点索引值;
父节点索引值 * 2+2=右子女节点索引值;
比如,节点9的索引为1,
左子女节点12索引值=1 * 2+1=3;
右子女节点25索引值=1 * 2+2=4;
//构造函数 function Tree(size) { var tree = [6]; for(var i = 1;i<size;i++){ tree[i] = 0; } //销毁树 this.destroy = function() { tree = null; }; //搜索节点 this.searchNode = function (index) { if(index<0 || index>=size){ return null; }; if(tree[index] == 0){ return null; } return tree[index]; }; //添加节点 this.addNode = function (index,direction,node) { if(index<0 || index>=size){ return false; }; if(tree[index] == 0){ return false; }; if(direction == 1){ if(index*2+1>=size){ return false; }; if(tree[index*2+1] != 0){ return false; }; tree[index*2+1] = node; }; if(direction == 2){ if(index*2+2>=size){ return false; }; if(tree[index*2+2] != 0){ return false; }; tree[index*2+2] = node; }; return true; }; //删除节点 this.deleteNode = function (index) { if(index<0 || index>=size){ return null; }; if(tree[index] == 0){ return null; } tree[index] = 0; return true; }; //遍历节点 this.treeTraverse = function () { for(var i=0;i<size;i++){ console.log(tree[i]); } } } var tree = new Tree(7); tree.addNode(0,1,9); tree.addNode(0,2,10); tree.addNode(1,1,12); tree.addNode(1,2,25); tree.addNode(2,1,12); tree.addNode(2,2,18); tree.treeTraverse();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。