python實現二叉樹
⑴ 如何編制python函數運用二叉樹定價模型進行投資決策
1、首先,將編制Python函數從左到右生成二叉樹。
2、其次,根據生成的二叉樹,從右向左計算期權價值。
3、最後,計算完成後,即可進行投資決策。
⑵ python 二叉樹實現四則運算
#!/usr/bin/python#* encoding=utf-8s = "20-5*(0+1)*5^(6-2^2)" c = 0top = [0,s[c],0]op = [["0","1","2","3","4","5","6","7","8","9"],["+","-"],["*","/"],["^"]] def getLev(ch): for c1 in range(0, len(op)): for c2 in range(0, len(op[c1])): if (op[c1][c2]==ch): return c1 elif (len(ch)>1): match = 0 for c3 in range(0, len(ch)): if (getLev(ch[c3])>=0): match+=1 if (match==len(ch)):return c1 return -1
⑶ python非遞歸建立二叉樹
http://code.activestate.com/recipes/286239-binary-ordered-tree/
看看他寫的吧
⑷ python 二叉樹是怎麼實現的
#coding:utf-8
#author:Elvis
classTreeNode(object):
def__init__(self):
self.data='#'
self.l_child=None
self.r_child=None
classTree(TreeNode):
#createatree
defcreate_tree(self,tree):
data=raw_input('->')
ifdata=='#':
tree=None
else:
tree.data=data
tree.l_child=TreeNode()
self.create_tree(tree.l_child)
tree.r_child=TreeNode()
self.create_tree(tree.r_child)
#visitatreenode
defvisit(self,tree):
#輸入#號代表空樹
iftree.dataisnot'#':
printstr(tree.data)+' ',
#先序遍歷
defpre_order(self,tree):
iftreeisnotNone:
self.visit(tree)
self.pre_order(tree.l_child)
self.pre_order(tree.r_child)
#中序遍歷
defin_order(self,tree):
iftreeisnotNone:
self.in_order(tree.l_child)
self.visit(tree)
self.in_order(tree.r_child)
#後序遍歷
defpost_order(self,tree):
iftreeisnotNone:
self.post_order(tree.l_child)
self.post_order(tree.r_child)
self.visit(tree)
t=TreeNode()
tree=Tree()
tree.create_tree(t)
tree.pre_order(t)
print' '
tree.in_order(t)
print' '
tree.post_order(t)
⑸ python 二叉樹實現思想
第一 :return 的縮進不對 ,
ifself.root==None:
self.root=node
return#如果這里不縮進,下面的語句無意義,直接返回,不會執行。
while queue這個循環的作用的是從root根結點開始,向下查找第一個左(右)子結點為空的結點,將node插入這個位置,queue的作用是將查找到的非空子結點保存在queue中,然後依次向下查找這些子結點的左右子結點
⑹ 如何用python構造一個n層的完全二叉樹
用python構造一個n層的完全二叉樹的代碼如下:
typedefstruct{
intweight;
intparent,lchild,rchild;
}HTNode,*HuffmanTree;//動態分配數組存儲huffman樹
演算法設計
voidcreateHuffmantree(){
ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode);//動態分配數組存儲huffman樹,0號單元未用
//m:huffman樹中的結點數(m=2*n-1)
for(i=1;i<=m;++i)
ht[i].parent=ht[i]->lch=ht[i]->rch=0;
for(i=1;i<=n;++i)
ht[i].weight=w[i];//初始化,w[i]:n個葉子的權值
for(i=n+1;i<=m,++i){//建哈夫曼樹
select(i-1),s1,s2);//在ht[k](1<=k<=i-1)中選擇兩個雙親域為零而權值取最小的結點:s1和s2
ht[s1].parent=ht[s2].parent=i;
ht[i].lch=s1;
ht[i].rch=s2;
ht[i].weight=ht[s1].weight+ht[s2].weight;
};
}
⑺ python二叉樹求深度的一個問題,有代碼,求解釋
這是遞歸演算法
我們可以先假設函數功能已經實現,left從左子樹拿到一個深度值,right從右子樹拿到一個深度值,最後,本層的深度為left和right的最大值加1,也就是最大深度值再算上自己這一層。
也可以從停止條件開始思考,什麼時候不再遞歸呢?當root為空時,並返回深度值為0。調用這一層的函數得到返回值就是0,我們假設這是左子樹left得到的值,同時假設右子樹也為空,所以right也為0。那麼返回給上一層的值就是left和right最大值加1,就是1,表示這個節點深度為1。同理,可以得到整棵樹深度。
⑻ Python 二叉樹的創建和遍歷、重建
幾個有限元素的集合,該集合為空或者由一個根(Root)的元素及兩不相交的(左子樹和右子樹)的二叉樹組成,是有序樹,當集合為空時,稱為空二叉樹,在二叉樹中,一個元素也稱為一個結點。
前序遍歷:若二叉樹為空,則空操作返回,否則先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹
中序遍歷:若樹為空,則空操作返回,否則從根結點開始(不是先訪問根結點),中序遍歷根結點的左子樹,然後訪問根節點,最後中序遍歷右子樹。
後序遍歷:若樹為空,則空操作返回,否則從左到右先訪問葉子結點後結點的方式遍歷左右子樹,最後訪問根節點。
層序遍歷:若樹為空,則空操作返回,否則從樹的每一層,即從根節點開始訪問,從上到下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。
假設已知後序遍歷和中序遍歷結果,從後序遍歷的結果可以等到最後一個訪問的結點是根節點,對於最簡單的二叉樹,此時在中序遍歷中找到根節點之後,可以分辨出左右子樹,這樣就可以重建出這個最簡單的二叉樹了。而對於更為復雜的二叉樹,重建得到根結點和暫時混亂的左右結點,通過遞歸將左右結點依次重建為子二叉樹,即可完成整個二叉樹的重建。(在得到根結點之後,需要在中序遍歷序列中尋找根結點的位置,並將中序序列拆分為左右部分,所以要求序列中不能有相同的數字,這是序列重建為二叉樹的前提。)
Root =None
strs="abc##d##e##" #前序遍歷擴展的二叉樹序列
vals =list(strs)
Roots=Create_Tree(Root,vals)#Roots就是我們要的二叉樹的根節點。
print(Roots)
inorderSearch = inOrderTraverse2(Roots)
print(inorderSearch)
⑼ Python演算法系列—深度優先遍歷演算法
一、什麼是深度優先遍歷
深度優先遍歷演算法是經典的圖論演算法。從某個節點v出發開始進行搜索。不斷搜索直到該節點所有的邊都被遍歷完,當節點v所有的邊都被遍歷完以後,深度優先遍歷演算法則需要回溯到v以前驅節點來繼續搜索這個節點。
注意:深度優先遍歷問題一定要按照規則嘗試所有的可能才行。
二、二叉樹
2.二叉樹類型
二叉樹類型:空二叉樹、滿二叉樹、完全二叉樹、完美二叉樹、平衡二叉樹。
空二叉樹:有零個節點
完美二叉樹:每一層節點都是滿的二叉樹(如1中舉例的圖)
滿二叉樹:每一個節點都有零個或者兩個子節點
完全二叉樹:出最後一層外,每一層節點都是滿的,並且最後一層節點全部從左排列
平衡二叉樹:每個節點的兩個子樹的深度相差不超過1.
註:國內對完美二叉樹和滿二叉樹定義相同
3.二叉樹相關術語
術語 解釋
度 節點的度為節點的子樹個數
葉子節點 度為零的節點
分支節點 度不為零的節點
孩子節點 節點下的兩個子節點
雙親節點 節點上一層的源節點
兄弟節點 擁有同一雙親節點的節點
根 二叉樹的源頭節點
深度 二叉樹中節點的層的數量
DLR(先序):
LDR(中序):
LRD(後序):
注意:L代表左子樹R代表右子樹;D代表根
6.深度優先遍歷和廣度優先遍歷
深度優先遍歷:前序、中序和後序都是深度優先遍歷
從根節點出發直奔最遠節點,
廣度優先遍歷:首先訪問舉例根節點最近的節點,按層次遞進,以廣度優先遍歷上圖的順序為:1-2-3-4-5-6-7
三、面試題+勵志
企鵝運維面試題:
1.二叉樹遍歷順序:看上文
2.用你熟悉的語言說說怎麼創建二叉樹? python看上文