数据结构-树

数据结构-树

你好! 这是你第一次使用 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))

  1. 构建表达式解析树 括号 操作符 操作数
    从左到右扫描,根据当前值所属不同类别,做不同插入操作
  2. 利用解析树求值计算

树的遍历

  • 前序遍历 root left right 如 书的章节阅读
  • 中序遍历 left root right
  • 后序遍历 left right root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值