实现
不是排序二叉树,只是简单的增删查改
class Node:
def __init__(self, id, data, left=None, right=None):
self.id = id
self.data = data
self.leftNode = left
self.rightNode = right
# 前序
def preOrder(self):
"""
先打印父节点,然后左节点,然后右节点
:return:Node
"""
print(self.id, self.data)
if self.leftNode is not None:
self.leftNode.preOrder()
if self.rightNode is not None:
self.rightNode.preOrder()
# 中序
def infixOrder(self):
"""
先打印左节点,在打印父节点,然后右节点
:return: Node
"""
if self.leftNode is not None:
self.leftNode.infixOrder()
print(self.id, self.data)
if self.rightNode is not None:
self.rightNode.infixOrder()
# 后序
def postOrder(self):
"""
先打印左节点,然后右节点,最后是父节点
:return:
"""
if self.leftNode is not None:
self.leftNode.postOrder()
if self.rightNode is not None:
self.rightNode.postOrder()
print(self.id, self.data)
# 前序查找
def preOrderSearch(self, id):
if self.id == id:
return self
# 向左递归
resultNode = None
if self.leftNode is not None:
resultNode = self.leftNode.preOrderSearch(id)
if resultNode is not None:
return resultNode
if self.rightNode is not None:
resultNode = self.rightNode.preOrderSearch(id)
return resultNode
def infixOrderSearch(self, id):
# 向左递归
resultNode = None
if self.leftNode is not None:
resultNode = self.leftNode.preOrderSearch(id)
if self.id == id:
return self
if resultNode is not None:
return resultNode
if self.rightNode is not None:
resultNode = self.rightNode.preOrderSearch(id)
return resultNode
def postOrderSearch(self, id):
# 向左递归
resultNode = None
if self.leftNode is not None:
resultNode = self.leftNode.preOrderSearch(id)
if resultNode is not None:
return resultNode
if self.rightNode is not None:
resultNode = self.rightNode.preOrderSearch(id)
if self.id == id:
return self
return resultNode
def delNode(self, id):
if self.leftNode is not None and self.leftNode.id == id:
self.leftNode = None
return True
if self.rightNode is not None and self.rightNode.id == id:
self.rightNode = None
return True
if self.leftNode is not None:
# 返回是True说明找到了,False就往下运行代码执行向右递归
if self.leftNode.delNode(id):
return True
if self.rightNode is not None:
if self.rightNode.delNode(id):
return True
return False
class BinaryTree:
def __init__(self, node):
self.root = node
def preOrder(self):
self.root.preOrder()
def infixOrder(self):
self.root.infixOrder()
def postOrder(self):
self.root.postOrder()
def preOrderSearch(self, id):
if self.root is not None:
return self.root.preOrderSearch(id)
else:
print("空树无法查找")
def infixOrderSearch(self, id):
if self.root is not None:
return self.root.infixOrderSearch(id)
else:
print("空树无法查找")
def postOrderSearch(self, id):
if self.root is not None:
return self.root.postOrderSearch(id)
else:
print("空树无法查找")
def delNode(self, id):
if self.root is None:
print("空树不能删除")
else:
return self.root.delNode(id)
node1 = Node(1, "node1")
node2 = Node(2, "node2")
node3 = Node(3, "node3")
node4 = Node(4, "node4")
node5 = Node(5, "node5")
node6 = Node(6, "node6")
node7 = Node(7, "node7")
node1.leftNode = node2
node2.leftNode = node6
node2.rightNode = node7
node1.rightNode = node3
node3.leftNode = node4
node3.rightNode = node5
tree = BinaryTree(node1)
tree.preOrder()
print("============")
tree.infixOrder()
print("============")
tree.postOrder()
resultNode = tree.preOrderSearch(5)
print(resultNode.id)
resultNode = tree.infixOrderSearch(5)
print(resultNode.id)
resultNode = tree.postOrderSearch(5)
print(resultNode.id)
print("============")
flag = tree.delNode(15)
print(flag)
tree.preOrder()
print("============")
tree.infixOrder()
print("============")
tree.postOrder()