本文共 2415 字,大约阅读时间需要 8 分钟。
树是一种抽象数据类型(ADT),用来模拟具有树状结构的数据集合。树由n(n≥1)个节点组成,每个节点可以有零个或多个子节点,且每个非根节点有且只有一个父节点。树的层次关系从根节点开始定义,根节点为第1层,其子节点为第2层,依此类推。
树的存储可分为两种方式:
class Node(object): def __init__(self, item): self.elem = item self.lchild = None self.rchild = Noneclass Tree(object): def __init__(self): self.root = None def add(self, item): node = Node(item) if self.root is None: self.root = node return queue = [self.root] while queue: cur_node = queue.pop(0) if cur_node.lchild is None: cur_node.lchild = node return else: queue.append(cur_node.lchild) if cur_node.rchild is None: cur_node.rchild = node return else: queue.append(cur_node.rchild)
def breadth_travel(self): if self.root is None: return queue = [self.root] while queue: cur_node = queue.pop(0) print(cur_node.elem, end=" ") if cur_node.lchild is not None: queue.append(cur_node.lchild) if cur_node.rchild is not None: queue.append(cur_node.rchild)
def preorder(self, node): if node is None: return print(node.elem, end=" ") self.preorder(node.lchild) self.preorder(node.rchild)def inorder(self, node): if node is None: return self.inorder(node.lchild) print(node.elem, end=" ") self.inorder(node.rchild)def postorder(self, node): if node is None: return self.postorder(node.lchild) self.postorder(node.rchild) print(node.elem, end=" ")
通过广度优先和深度优先遍历,可以唯一确定一棵树的结构。
转载地址:http://vviv.baihongyu.com/