"""二叉樹的list實現
"""def bintree(data, left=none, right=none):
"""二叉樹
:param data: 根結點的元素
:param left: 左子樹元素
:param right: 右子樹元素
:return:
"""return
[data, left, right]
defis_empty_bintree(btree):
return btree is
none
defroot(btree):
return
btree[0]
defleft(btree):
return btree[1]
defright(btree):
return btree[2]
defset_root(btree, data):
btree[0] =data
defset_left(btree, left):
btree[1] =left
defset_right(btree, right):
btree[2] =right
if__name__ == '
__main__':
t1 = bintree(2, bintree(4), bintree(8))
print(t1) #
[2, [4, none, none], [8, none, none]]
"""二叉樹的簡單應用:表示式樹
"""#
表示式建構函式
defmake_sum(a, b):
return ('+'
, a, b)
defmake_prod(a, b):
return ('*'
, a, b)
defmake_diff(a, b):
return ('-'
, a, b)
defmake_div(a, b):
return ('/'
, a, b)
#是否是基本表示式,也就是數或者變數
defis_basic_exp(a):
return
notisinstance(a, tuple)
#判斷是否是數值
defis_number(x):
return isinstance(x, int) or isinstance(x, float) or
isinstance(x, complex)
defeval_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)
defeval_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)
defeval_diff(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(a) and a == 1:
return
b
if is_number(b) and b ==0:
return
0
return
make_diff(a, b)
defeval_prod(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_prod(a, b)
defeval_exp(e):
ifis_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)
elif op == '*'
:
return
eval_diff(a, b)
elif op == '-'
:
return
eval_prod(a, b)
elif op == '/'
:
return
eval_div(a, b)
else
:
raise valueerror("
unknown operator:
", op)
el = make_prod(3, make_sum(2, 5))
print(el) #
('*', 3, ('+', 2, 5))
print(eval_exp(el)) #
21el1 = make_prod(3, make_sum(-2, 5))
print(el1) #
('*', 3, ('+', -2, 5))
print(eval_exp(el1)) #
9
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
二叉樹 二叉鍊錶
include using namespace std typedef char elemtype int n 0 typedef struct binode binode class bitree bitree binode getroot void preorder binode root 前序...
二叉樹的應用 二叉樹遍歷的應用
在以上討論的遍歷演算法中,訪問結點的資料域資訊,即操作visite bt data 具有更一般的意義,需根據具體問題,對bt 資料進行不同的操作。下面介紹幾個遍歷操作的典型應用。search bt,x 在bt 為二叉樹的根結點指標的二叉樹中查詢資料元素x。查詢成功時返回該結點的指標 查詢失敗時返回空...