python实现二叉树与三种遍历方法、二叉树的镜像

版权声明:非诚勿扰 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

猜你喜欢

转载自blog.csdn.net/kaikai0803/article/details/84578848