您的位置:首页 > 理论基础 > 数据结构算法

Python写数据结构:二叉树的创建和遍历

2018-02-03 12:21 459 查看
#!/usr/bin/python3.5
#_*_coding:utf-8_*_

class Node:
def __init__(self,value):
self.data = value
self.lchild = None
self.rchild = None

class Tree:
def __init__(self):
self.__root = None
self.__i = 0 #用于方便创建树

def __createTree(self,T,str):
c = str[self.__i]
self.__i += 1
if c == '#':
T = None
else:
T = Node(c)
T.lchild = self.__createTree(T.lchild,str)
T.rchild = self.__createTree(T.rchild,str)
return T

def createTree(self,str):
root = None
self.__i = 0
self.__root = self.__createTree(root,str)
return self.__root

def clearTree(self,T):
if T == None:
return
temp = T
self.clearTree(T.lchild)
self.clearTree(T.rchild)
del temp
return None

def treeEmpty(self):
return self.__root == None

def treeDepth(self,T):
if T == None:
return 0
left = self.treeDepth(T.lchild)
right = self.treeDepth(T.rchild)
return left + 1 if left >= right else right + 1

def getRoot(self):
if self.treeEmpty():
print('树空')
return
else:
print(self.__root.data)
return self.__root.data

def postOrderTraverse(self,T = None):
if T == None:
print('#')
return
self.postOrderTraverse(T.lchild)
self.postOrderTraverse(T.rchild)
print(T.data)

def inOrderTraverse(self,T):
if T == None:
print('#')
return
self.inOrderTraverse(T.lchild)
print(T.data)
self.inOrderTraverse(T.rchild)

def preOrderTraverse(self,T):
if T == None:
print('#')
return
print(T.data)
self.preOrderTraverse(T.lchild)
self.preOrderTraverse(T.rchild)

if __name__ == '__main__':
tree = Tree()
root = tree.createTree('AB#D##C##')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: