python與和資料結構練習 樹的簡單實現

2021-10-04 10:40:21 字數 3441 閱讀 4769

基於python 的列表很容易實現了乙個簡單的樹結構以及遍歷

宣告了乙個物件類來建立樹,並賦予一些方法進行節點操作,如遍歷輸出、節點查詢等

見**

class tree_node(object):

def __init__(self,data,parent=none):

self.parent = parent

self.data = data

self.children =

self.isroot = self.is_root()

def is_root(self):

"""判斷是否為根節點

"""if self.parent != none:

return false

else:

return true

def get_root(self):

"""返回根節點node

"""if self.is_root():

return self

else:

return self.parent.get_root()

"""向當前節點加入子節點

"""child.set_parent(self)

self.isroot = self.is_root()

def delete(self, node):

"""從子節點中刪除節點

"""if node in self.children:

self.children.remove(node)

else:

return false

def set_parent(self,parent):

"""設定當前節點的父節點

"""self.parent = parent

self.isroot = self.is_root()

def index(self,node):

"""返回子節點的索引

"""if node in self.children:

return self.children.index(node)

else:

return false

def print_children(self):

"""遍歷輸出子節點data

"""print(self.data)

if len(self.children) > 0:

for child in self.children:

child.print_children()

def depth(self):

"""以當前節點為root返回深度

"""d = 0

if len(self.children) > 0:

d += 1

if len(self.children[0].children) > 0:

d += self.children[0].depth()

return d

def num_of_children(self):

"""返回子節點數量

"""return len(self.children)

def get_child(self,node):

"""查詢子節點,返回相對位置,否則返回 false,

"""if node in self.children:

return self.children.index(node)

else:

return false

def next(self):

"""返回相鄰節點node,失敗返回 false

"""if self.isroot == false:

if self.parent.num_of_children() > self.parent.children.index(self) + 1:

return self.parent.children[self.parent.children.index(self) + 1]

else:

return false

else:

return false

def find(self,data):

"""尋找子樹節點是否包含有data,找到返回第乙個節點node,失敗返回false

"""if self.data == data:

return self

else:

if len(self.children) > 0:

for i in range(len(self.children)):

return self.children[i].find(data)

return false

def find_node(self,node):

"""尋找子樹節點是否包含有節點,找到返回節點位置(depth,index),失敗返回false

"""if self == node:

return self.depth(),self.parent.get_child(self)

else:

if len(self.children) > 0:

for i in range(len(self.children)):

return self.children[i].find_node(node)

return false

def generate_nodes(node,max,n=0):

"""生成葉結點層

"""node_ = node

if len(node.children) < max:

t = tree_node(n+1)

#t.set_parent(node_)

n += 1

return generate_nodes(node_,max,n)

else:

return node_

def generate_trunks(node,max,n=0):

"""生成枝幹節點

"""node_ = node

root = node_.get_root()

t = tree_node(n+1,node_)

d = root.depth()

if d < max:

n += 1

return generate_trunks(t,max,n)

else:

return t.get_root()

if __name__ == '__main__':

t0 = tree_node(0)

t = generate_trunks(t0,3)

t.print_children()

print('樹深度: {}'.format(t.depth()))

print(t.find(3))

print(t.find_node(t.children[0]))

python資料結構練習

貝葉斯估計用到的資料結構 pandas常用到的 索引與切片,unique,value counts reindex,sort index 可以用於seires,也可以是dataframe,但只對index本身,index或columns本身進行排序,而不是其對應的元素進行排序 order 對seri...

Python資料結構練習

1.給定列表l,如 2,5,3,8,10,1 對其進行公升序排序並輸出。list 2,5,8,10,1 print list list.sort print list 2.給定字串s,如 123456 將其逆序輸出,使用切片 str 123456 print str 1 3.給定字典dict,如,分...

資料結構與演算法 演算法 演算法和資料結構

資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...