python実装ツリー
3522 ワード
最近pythonに興味があり、ネット上で広く伝わっている簡明なpythonチュートリアルを基本的に見て、自分も遊んでみましたが、pythonは確かに優雅な言語だと思います.
先日ネットでpythonのツリーコードを見て、書くことを学んで、ツリーへの遍歴方法を増やしました.
コードは次のとおりです.
フォーマットが乱れているかどうか分かりません
pythonの豊富なモジュールは、スクリプトの特性と比較して迅速な開発に適しており、いくつかのアルゴリズムのプレゼンテーションも便利です.
先日ネットでpythonのツリーコードを見て、書くことを学んで、ツリーへの遍歴方法を増やしました.
コードは次のとおりです.
フォーマットが乱れているかどうか分かりません
#!/usr/bin/python
#*_*coding:utf-8*_*
import os
class Node:
def __init__(self, value = None, parent = None , left = None, right = None):
self.value = value
self.parent = parent
self.left = left
self.right = right
def wideOrder(n):
if n==None:
return
l = list()
l.append(n)
while len(l)>0:
tmp = l.pop(0)
print tmp.value
if tmp.left!=None:
l.append(tmp.left)
if tmp.right!=None:
l.append(tmp.right)
def preOrder(n):
if n==None:
return
print n.value
preOrder(n.left)
preOrder(n.right)
def midOrder(n):
if n==None:
return
midOrder(n.left)
print n.value
midOrder(n.right)
def aftOrder(n):
if n==None:
return
aftOrder(n.left)
aftOrder(n.right)
print n.value
def getDepth(n):
if n==None:
return 0;
n_left = getDepth(n.left)
n_right = getDepth(n.right)
if n_left>=n_right:
return n_left+1
else:
return n_right+1
class Tree:
def __init__(self):
self.root = None
self.size = 0
self.depth = 0
def insert(self, n):
if n == None:
return
if self.root == None:
self.root = n
self.size=self.size+1
self.depth = 1
return
tmp = self.root
tmpDepth = 1
while True:
tmpDepth = tmpDepth+1
if n.value <= tmp.value:
if tmp.left == None:
n.parent = tmp
tmp.left = n
self.size = self.size+1
self.depth = max(self.depth, tmpDepth)
break
else:
tmp = tmp.left
elif n.value > tmp.value:
if tmp.right == None:
n.parent = tmp
tmp.right = n
self.size = self.size+1
self.depth = max(self.depth, tmpDepth)
break
else:
tmp=tmp.right
def find(self, v):
if v==None or self.root==None:
print 'None'
return
tmp=self.root
while True:
if v==tmp.value:
print 'find it ', v
break
elif v<tmp.value:
if tmp.left==None:
print 'None'
break
else:
tmp=tmp.left
else:
if tmp.right==None:
print 'None'
break
else:
tmp=tmp.right
tree = Tree()
tree.insert(Node(5))
tree.insert(Node(2))
tree.insert(Node(-3))
tree.insert(Node(4))
tree.insert(Node(3))
tree.insert(Node(6))
tree.insert(Node(-1))
tree.insert(Node(7))
print u' '
preOrder(tree.root)
print u' '
midOrder(tree.root)
print u' '
aftOrder(tree.root)
print u' '
wideOrder(tree.root)
print 'Classic Depth ', getDepth(tree.root)
print 'Tree size %d depth %d' %(tree.size, tree.depth)
pythonの豊富なモジュールは、スクリプトの特性と比較して迅速な開発に適しており、いくつかのアルゴリズムのプレゼンテーションも便利です.