版权声明:非诚勿扰 https://blog.csdn.net/kaikai0803/article/details/84578848
# 1 二叉树的实现
# 1-1 节点类
class Node(object):
def __init__(self, root):
self.root = root
self.left = None
self.right = None
# 1-2 树类
class Tree(object):
def __init__(self, x_list=None):
self.x_iter = iter(x_list)
def add(self, root=None):
try:
x = next(self.x_iter)
node = Node(x)
if not root:
root = node
root.left = self.add(root.left)
root.right = self.add(root.right)
return root
# 为了防止StopIterator
except Exception as e:
# print('Error')
pass
def preOrder(self, tree):
if tree:
print(tree.root, end=' ')
self.preOrder(tree.left)
self.preOrder(tree.right)
def revOrder(self, tree):
if tree:
self.revOrder(tree.right)
self.revOrder(tree.left)
print(tree.root, end=' ')
def midOrder(self, tree):
if tree:
self.midOrder(tree.left)
print(tree.root, end=' ')
self.midOrder(tree.right)
def Mirror(self, node):
if not node:
return -1
print(node.root, end=' ')
if node.left:
self.Mirror(node.left)
if node.right:
self.Mirror(node.right)
node.left, node.right = node.right, node.left
return node
lt = [i for i in range(10)]
lt = [3,6,1,7,9,4,2,7,9,2,3]
tree = Tree(lt)
root = tree.add()
tree.preOrder(root)
print()
# tree.revOrder(root)
# print()
# tree.midOrder(root)
# print()
tree_rev = tree.Mirror(root)
print()
tree.preOrder(tree_rev)
'''
print('-'*50)
class BTNode(object):
def __init__(self, key=None, lchild=None, rchild=None):
self.key = key
self.lchild = lchild
self.rchild = rchild
class BiTree(object):
def __init__(self, data_list):
#初始化即将传入的列表的迭代器
self.it = iter(data_list)
def createBiTree(self, bt=None):
try:
#步进获取下一个元素
next_data = next(self.it)
#如果当前列表元素为'#', 则认为其为 None
if next_data is "#":
bt = None
else:
bt = BTNode(next_data)
bt.lchild = self.createBiTree(bt.lchild)
bt.rchild = self.createBiTree(bt.rchild)
except Exception as e:
# print('Error')
pass
return bt
#先序遍历函数
def preOrderTrave(self, bt):
if bt is not None:
print(bt.key, end=" ")
self.preOrderTrave(bt.lchild)
self.preOrderTrave(bt.rchild)
#中序遍历函数
def inOrderTrave(self, bt):
if bt is not None:
self.inOrderTrave(bt.lchild)
print(bt.key, end=" ")
self.inOrderTrave(bt.rchild)
#后序遍历函数
def postOrderTrave(self, bt):
if bt is not None:
self.postOrderTrave(bt.lchild)
self.postOrderTrave(bt.rchild)
print(bt.key, end=" ")
def printTrave(self, bt):
print("先序遍历: ", end="")
self.preOrderTrave(bt)
print()
print("中序遍历: ", end="")
self.inOrderTrave(bt)
print()
print("后序遍历: ", end="")
self.postOrderTrave(bt)
print()
# print(bt.lchild.key)
data_list = [1,2,3,4,5,6,7,8,9,10]
btree = BiTree(data_list)
root = btree.createBiTree()
btree.printTrave(root)
'''
# 2 二叉树的镜像
class MirrorBtree(Tree):
def Mirror(self, tree):
if tree:
self.Mirror(tree.left)
self.Mirror(tree.right)
else:
self.left, self.right = self.right, self.left