赞
踩
❖树在计算机科学的各个领域中被广泛应用操作系统、图形学、数据库系统、计算机网络
❖跟自然界中的树一样,数据结构树也分为:
根、枝和叶等三个部分
一般数据结构的图示把根放在上方,叶放在下方
❖节点Node:组成树的基本部分每个节点具有名称,或“键值”,节点还可以保存额外数据项,数据项根据不同的应用而变
❖边Edge:边是组成树的另一个基本部分每条边恰好连接两个节点,表示节点之间具有关联,边具有出入方向;每个节点(除根节点)恰有一条来自另一节点的入边;每个节点可以有多条连到其它节点的出边
❖根Root:树中唯一一个没有入边的节点
❖路径Path:由边依次连接在一起的节点的有序列表
❖子节点Children:入边均来自于同一个节点的若干节点,称为这个节点的子节点
❖父节点Parent:一个节点是其所有出边所连接节点的父节点
❖兄弟节点Sibling:具有同一个父节点的节点之间称为兄弟节点
❖子树Subtree:一个节点和其所有子孙节点,以及相关边的集合
❖ 叶节点Leaf:没有子节点的节点称为叶节点
❖ 层级Level:从根节点开始到达一个节点的路径所包含的边的数量,称为这个节点的层级。如D的层级为2,根节点的层级为0
❖ 高度:树中所有节点的最大层级称为树的高度
❖树由若干节点,以及两两连接节点的边组成,并有如下性质
其中一个节点被设定为根;
每个节点n(除根节点),都恰连接一条来自节点p的边,p是n的父节点;
每个节点从根开始的路径是唯一的如果每个节点最多有两个子节点,这样的树称为“二叉树”
❖首先我们尝试用Python List来实现二叉树树数据结构;
❖递归的嵌套列表实现二叉树,由具有3个元素的列表实现:
第1个元素为根节点的值;
第2个元素是左子树(所以也是一个列表);
第3个元素是右子树(所以也是一个列表)
❖以右图的示例,一个6节点的二叉树
根是myTree[0],左子树myTree[1],右子树myTree[2]
❖嵌套列表法的优点
子树的结构与树相同,是一种递归数据结构,很容易扩展到多叉树,仅需要增加列表元素即可
BinaryTree创建仅有根节点的二叉树
insertLeft/insertRight将新节点插入树中作为其直接的左/右子节点
get/setRootVal则取得或返回根节点
getLeft/RightChild返回左/右子树
def BinaryTree(r): return [r,[],[]] def insertLeft(root,newBranch): t= root.pop(1) if len(t)>1: root.insert(1,[newBranch,t,[]]) else: root.insert(1,[newBranch,[],[]]) return root def insertRight(root,newBranch): t= root.pop(2) if len(t)>1: root.insert(2,[newBranch,[],t]) else: root.insert(2,[newBranch,[],[]]) return root def getRootVal(root): return root[0] def setRootVal(root,newVal): root[0]=newVal def getLeftChild(root): return root[1] def getRightChild(root): return root[2]
❖同样可以用节点链接法来实现树
每个节点保存根节点的数据项,以及指向左右子树的链接
❖定义一个BinaryTree类
成员key保存根节点数据项成员left/rightChild则保存指向左/右子树的引用(同样是BinaryTree对象)
class BinaryTree: def __init__(self, rootObj): self.key = rootObj self.leftChild = None self.rightChild = None def insertLeft(self, newNode): if self.leftChild is None: self.leftChild = BinaryTree(newNode) else: t = BinaryTree(newNode) t.leftChild = self.leftChild self.leftChild = t def insertRight(self, newNode): if self.rightChild is None: self.rightChild = BinaryTree(newNode) else: t = BinaryTree(newNode) t.rightChild = self.rightChild self.rightChild = t def getRightChild(self): return self.rightChild def getLeftChild(self): return self.leftChild def setRootVal(self, obj): self.key = obj def getRootVal(self): return self.key
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。