树是一类重要的非线性数据结构,是以分支关系定义的层次结构node
定义:python
树(tree)是n(n>0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root)数据结构
当n>1时,其他结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每个集合自己又是一棵树,称为根的子树(subtree)app
特色: 树中至少有一个结点——根 树中各子树是互不相交的集合rest
基本术语code
结点(node)——表示树中的元素,包括数据项及若干指向其子树的分支blog
结点的度(degree)——结点拥有的子树数 叶子(leaf)——度为0的结点it
孩子(child)——结点子树的根称为该结点的孩子class
双亲(parents)——孩子结点的上层结点叫该结点的~二叉树
兄弟(sibling)——同一双亲的孩子
树的度——一棵树中最大的结点度数
结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层……
深度(depth)——树中结点的最大层次数
森林(forest)——m(m0)棵互不相交的树的集合
二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。
实现方法
class Node: def __init__(self,value=None,left=None,right=None): self.value=value self.left=left #左子树 self.right=right #右子树 def preTraverse(root, res=[]): ''' 前序遍历 ''' if root==None: return res.append(root.value) preTraverse(root.left, res) preTraverse(root.right, res) return res def midTraverse(root, res=[]): ''' 中序遍历 ''' if root==None: return midTraverse(root.left, res) res.append(root.value) midTraverse(root.right) return res def afterTraverse(root, res=[]): ''' 后序遍历 ''' if root==None: return afterTraverse(root.left) afterTraverse(root.right) res.append(root.value) return res def traverse(root, res=[]): ''' 层次遍历 ''' if root==None: return delroot = [root] while delroot: current = delroot.pop(0) res.append(current.value) if current.left: delroot.append(current.left) if current.right: delroot.append(current.right) return res if __name__=='__main__': root=Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',Node('F')))) print('前序遍历:') print(preTraverse(root)) print('中序遍历:') print(midTraverse(root)) print('后序遍历:') print(afterTraverse(root)) print('层次遍历:') print(traverse(root))
前序遍历: ['D', 'B', 'A', 'C', 'E', 'G', 'F'] 中序遍历: ['A', 'B', 'C', 'D', 'E', 'F', 'G'] 后序遍历: ['A', 'C', 'B', 'F', 'G', 'E', 'D'] 层次遍历: ['D', 'B', 'E', 'A', 'C', 'G', 'F']