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