美文网首页
二叉树-链表存储,用二叉树构造表达式(Python实现)

二叉树-链表存储,用二叉树构造表达式(Python实现)

作者: 美雨知春 | 来源:发表于2020-09-14 18:16 被阅读0次

既然用到二叉树了,直观上链表的方式比较容易接受,下面用python实现简单的二叉树。二叉树是递归结构,Python的list也是递归结构,基于list类型很容易实现二叉树:
下面是函数

def bintree(data,left=None,right=None):
    return [data,left,right]
def is_empty_bintree(btree):
    return btree is None
def root(btree):
    return btree[0]
def left(btree):
    return btree[1]
def right(btree):
    return btree[2]
def set_root(btree,data):
    btree[0] = data
def set_left(btree,left):
    btree[1]=left
def set_right(btree,right):
     btree[2]=right
t1 = bintree(2,bintree(4),bintree(8))
print t1
# t1 = [2,[4,None,None],[8,None,None]]
set_left(left(t1),bintree(5))
print t1

执行结果:
[2, [4, None, None], [8, None, None]]
[2, [4, [5, None, None], None], [8, None, None]]

上面用二叉树构造了表达式,下面采用tuple计算结果,计算公式:

def is_basic_exp(a):
    return not isinstance(a,tuple)
def is_number(x):
    return (isinstance(x,int) or isinstance(x,float) or isinstance(x,complex))
def eval_sum(a,b):
        if is_number(a) and is_number(b):
            return a+b
        if is_number(a) and a ==0:
            return b
        if is_number(b) and b==0:
            return a
        return make_sum(a,b)
def eval_div(a,b):
        if is_number(a) and is_number(b):
            return a/b
        if is_number(a) and a ==0:
            return 0
        if is_number(b) and b==1:
            return a
        if is_number(b) and b ==0:
            raise ZeroDivisionError
        return make_div(a,b)
def eval_prod(a,b):
        if is_number(a) and is_number(b):
            return a*b
        return make_prod(a,b)
def eval_exp(e):
    if is_basic_exp(e):
        return e
    op, a, b = e[0],eval_exp(e[1]),eval_exp(e[2])
    #**
    if op =='+':
        return eval_sum(a,b)
    if op=='-':
        return eval_diff(a,b)
    if op =='*':
        return eval_prod(a,b)
    elif op == '/':
        return eval_div(a,b)
    else:
        raise ValueError("Unknown operator:", op)

a = 3
b = 2
e2 = make_sum(make_prod(a,2),make_prod(b,7))
print e2

e3 =  eval_exp(e2)
print e3

计算结果:
('', 3, ('+', 2, 5))
('+', ('
', 3, 2), ('*', 2, 7))
20

相关文章

  • 二叉树-链表存储,用二叉树构造表达式(Python实现)

    既然用到二叉树了,直观上链表的方式比较容易接受,下面用python实现简单的二叉树。二叉树是递归结构,Python...

  • Python数据结构(栈, 队列, 二叉树, 链表, 图)

    Python栈 Python队列 Python二叉树 二叉树使用 Python链表

  • 常用数据结构

    一、序列 数组:顺序存储,随机访问 链表:链表存储,顺序访问 栈 队列 串 二、树 1)二叉树 2)遍历二叉树 前...

  • 「树」,用数组实现就是「堆」,因为「堆」是一个完全二叉树,用数组存储不需要节点指针,操作也比较简单;用链表实现就是...

  • 二叉树

    定义 斜树 完美二叉树 完全二叉树 存储结构 顺序存储结构 二叉链表 二叉...

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

  • 数据结构

    存储方式 1.连续性存储:数组 2.非连续性存储:链表、二叉树 栈的底层实现:LinkedList 、Array堆...

  • 四、树与二叉树

    四、树与二叉树 1. 二叉树的顺序存储结构 二叉树的顺序存储就是用数组存储二叉树。二叉树的每个结点在顺序存储中都有...

  • 二叉树的链式存储结构及四种遍历算法

    当二叉树不是完全二叉树时,使用顺序表来存储会造成很多的空间浪费,因此对于普通二叉树来说,使用链表存储更为合适。 采...

  • 从零开始养成算法·篇十二:线索化二叉树

    一、线索二叉树原理 二叉树可以使用两种存储结构:顺序存储和二叉链表。在使用二叉链表的存储结构的过程中,会存在大量的...

网友评论

      本文标题:二叉树-链表存储,用二叉树构造表达式(Python实现)

      本文链接:https://www.haomeiwen.com/subject/gldzektx.html