数据结构-树
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
树的实现
嵌套列表实现树
此处假设为二叉树,每个子树为三个元素的list,相关方法
- BinaryTree 创建只有根节点的树
- insertLeft(root,newBranch) 插入左子树
- insertRight(root,newBranch) 插入右子树
- getRootVal(root) 获取某子树根节点 即index为0的元素
- setRootVal(root,newVal) 设置某子树根节点值
- getLeftChild(root)
- getRightChild(root)
def insertLeft(root,newBranch):
t = root.pop(1) # 左子树为index为1的元素,右子树是2
if len(t) > 1:
# 子树不是空list 即root已经有左子树,这时原左子树下移到newBranch的index==1的位置,newBranch作为root左子树
# insert() 函数用于将指定对象插入列表的指定位置。
root.insert(1,[newBranch,t,[]])
else:
root.insert(1,[newBranch, [], []])
return root
链表实现树
方法实现通过递归实现
def __init__(self,rootObj):
self.key = rootObj
self.leftChild = None
self.rightChild = None
应用
表达式解析
((7+3)*(5-2))
- 构建表达式解析树 括号 操作符 操作数
从左到右扫描,根据当前值所属不同类别,做不同插入操作 - 利用解析树求值计算
树的遍历
- 前序遍历 root left right 如 书的章节阅读
- 中序遍历 left root right
- 后序遍历 left right root