快要畢業了但是**能力實在是太差了,想要刷leetcode但是發現,自己連樹的python都無法實現,萬事開頭難,做一些學習和記錄。
class
binarytree
:def
__init__
(self,rootvalue)
: self.rootvalue = rootvalue
self.leftchild =
none
self.rightchild =
none
注意對於非常小白的小白而言,需要了解python中的類以及類中__init__
的用法,其次要了解樹的結構,可參考木水的文章,本篇文章也是在此基礎上分享一些自己的想法和學到的經驗,與大家一起學習進步~
def
insertleft
(self,newvalue)
:if self.leftchild ==
none
: self.leftchild = binarytree(newvalue)
else
: t = binarytree(newvalue)
t.leftchild = self.leftchild
self.leftchild = t
definsertright
(self,newvalue)
:if self.rightchild ==
none
: self.rightchild = binarytree(newvalue)
else
: t = binarytree(newvalue)
t.rightchild = self.rightchild
self.rightchild = t
我的**其實並不是十分規範,參考之後要自己上手進行練習,在插入左右子樹之前需要對節點的左右子樹是否為空進行判斷,兩者的插入方式並不相同。用t來先創立以新的插入值建立的子樹即t = binarytree(newvalue)
可能你並不明白我在說什麼,自己上手簡單程式設計即可明白。
樹應當具有基本功能,查詢左右子樹,查詢值和更新值。
def
getrightchild
(self)
:return self.rightchild
defgetleftchild
(self)
:return self.leftchild
defgetrootvalue
(self)
:return self.rootvalue
defsetrootvalue
(self,value)
: self.rootvalue = value
a = binarytree(
'1')
a.insertleft(
'l')
a.insertright(
'r')
print
(a.getrootvalue(
),a.getleftchild(
).rootvalue,a.rightchild)
a.insertleft(
'l')
print
(a.getleftchild(
).rootvalue,a.getleftchild(
).getleftchild(
).rootvalue)
結果
1 l <__main__.binarytree object at 0x00000218acfed748
>
l l程序已結束,退出** 0
會發現其實如果想要得到節點的值,既可以用a.getrootvalue()
,也可以用a.rootvalue
,注意後面一種是沒有括號()的。在使用的過程中時刻牢記使用的是樹結構,呼叫的是值還是函式,否則會很混亂。 學習筆記 Python實現樹的遍歷 (DFS)
學習了通過python實現樹的遍歷 dfs 自己還原了一下 樹 dfs class treenode object def init self,x self.val x self.left none self.right none if name main 構建樹 t1 treenode 1 t2 ...
Python學習week5 樹的特性
1 樹 非線性結構,每個元素可以有多個前驅和後繼 2 樹的結點 樹種的資料元素 結點的度 結點擁有子樹的數目 1 二叉樹 每個結點最多2棵子樹 二叉樹是有序樹,左子樹 右子樹是順序的,不能交換次順 2 滿二叉樹 一顆二叉樹的所有分支結點都存在左子樹和右子樹,並且所有葉子結點只存在最下面一層 k為深度...
機器學習python實戰 決策樹
決策樹演算法是一種逼近離散函式值的方法 通過把例項從根節點排列到某個葉子結點來對例項分類。葉子結點即為例項所屬的分類。樹上的每乙個結點指定了對例項的某個屬性的測試,並且該結點的每乙個後繼分支對應於該屬性的乙個可能值。分類例項的方法是從這棵樹的根節點開始,測試這個結點的屬性,然後按照給定例項的屬性值對...