|
@@ -0,0 +1,154 @@
|
|
|
+#列表函数
|
|
|
+def BinaryTree(r):
|
|
|
+ return [r, [], []]
|
|
|
+
|
|
|
+#插入左子树
|
|
|
+def insertLeft(root, newBranch):
|
|
|
+ t = root.pop(1)
|
|
|
+ if len(t) > 1:
|
|
|
+ root.insert(1, [newBranch, t, []])
|
|
|
+ else:
|
|
|
+ root.insert(1, [newBranch, [], []])
|
|
|
+ return root
|
|
|
+
|
|
|
+#插入右子树
|
|
|
+def insertRight(root, newBranch):
|
|
|
+ t = root.pop(2)
|
|
|
+ if len(t) > 1:
|
|
|
+ root.insert(2, [newBranch, [], t])
|
|
|
+ else:
|
|
|
+ root.insert(2, [newBranch, [], []])
|
|
|
+ return root
|
|
|
+
|
|
|
+#树的访问函数
|
|
|
+def getRootVal(root):
|
|
|
+ return root[0]
|
|
|
+
|
|
|
+def setRootVal(root, newval):
|
|
|
+ root[0] = newval
|
|
|
+
|
|
|
+def getLeftChild(root):
|
|
|
+ return root[1]
|
|
|
+
|
|
|
+def getRightChild(root):
|
|
|
+ return root[2]
|
|
|
+
|
|
|
+
|
|
|
+# 二叉树的访问函数
|
|
|
+def getLeftChild(self):
|
|
|
+ return self.leftChild
|
|
|
+
|
|
|
+def getRightChild(self):
|
|
|
+ return self.rightChild
|
|
|
+
|
|
|
+def setRootValue(self, obj):
|
|
|
+ self.key = obj
|
|
|
+
|
|
|
+def getRootValue(self):
|
|
|
+ return self.key
|
|
|
+
|
|
|
+
|
|
|
+# 定义节点
|
|
|
+class BinaryTree:
|
|
|
+ def __init__(self, rootObj):
|
|
|
+ self.key = rootObj
|
|
|
+ self.leftChild = None # 左子节点也是树
|
|
|
+ self.rightChild = None # 右子节点也是树
|
|
|
+
|
|
|
+# 插入左子节点
|
|
|
+def insertLeft(self, newNode):
|
|
|
+ if self.leftChild == None:
|
|
|
+ self.leftChild = newNode
|
|
|
+ else:
|
|
|
+ t = BinaryTree(newNode)
|
|
|
+ t.leftChild = self.leftChild
|
|
|
+ self.leftChild = t
|
|
|
+
|
|
|
+# 插入右子节点
|
|
|
+def insertRight(self, newNode):
|
|
|
+ if self.rightChild == None:
|
|
|
+ self.rightChild = newNode
|
|
|
+ else:
|
|
|
+ t = BinaryTree(newNode)
|
|
|
+ t.rightChild = self.rightChild
|
|
|
+ self.rightChild = t
|
|
|
+
|
|
|
+# 树的遍历
|
|
|
+
|
|
|
+# 前序
|
|
|
+def preorder(tree):
|
|
|
+ if tree:
|
|
|
+ print(tree.getRootVal())
|
|
|
+ preorder(tree.getLeftChild())
|
|
|
+ preorder(tree.getRightChild())
|
|
|
+
|
|
|
+# 中序
|
|
|
+def inorder(tree):
|
|
|
+ if tree:
|
|
|
+ inorder(tree.getLeftChild())
|
|
|
+ print(tree.getRootVal())
|
|
|
+ inorder(tree.getRightChild())
|
|
|
+
|
|
|
+# 后序
|
|
|
+def postorder(tree):
|
|
|
+ if tree:
|
|
|
+ postorder(tree.getLeftChild())
|
|
|
+ postorder(tree.getRightChild())
|
|
|
+ print(tree.getRootVal())
|
|
|
+
|
|
|
+# 树
|
|
|
+# class Bnode(object):
|
|
|
+# def __init__(self, data, left=None, right=None):
|
|
|
+# self.data = data
|
|
|
+# self.left = left
|
|
|
+# self.right = right
|
|
|
+#
|
|
|
+# class Btree(object):
|
|
|
+# def __init__(self, root=None):
|
|
|
+# self.root = root
|
|
|
+#
|
|
|
+# @classmethod
|
|
|
+# def bulid(cls, list):
|
|
|
+# node_dict = {}
|
|
|
+# # 制作节点
|
|
|
+# for item in list:
|
|
|
+# data = item['data']
|
|
|
+# node_dict[data] = Bnode(data)
|
|
|
+# # 把节点组装成数
|
|
|
+# for item in list:
|
|
|
+# data = item['data']
|
|
|
+# node = node_dict[data]
|
|
|
+# if node['is_root']:
|
|
|
+# root = node
|
|
|
+# node.left = node_dict.get(item['left'])
|
|
|
+# node.right = node_dict.get(item['right'])
|
|
|
+# return cls(root)
|
|
|
+#
|
|
|
+# def preorder(self, subtree):
|
|
|
+# # 先序
|
|
|
+# if subtree is not None:
|
|
|
+# print(subtree.data)
|
|
|
+# self.preorder(subtree.left)
|
|
|
+# self.preorder(subtree.right)
|
|
|
+#
|
|
|
+# def reverse(self, subtree):
|
|
|
+# # 后序
|
|
|
+# if subtree is not None:
|
|
|
+# subtree.left, subtree.right = subtree.right, subtree.left
|
|
|
+# self.reverse(self, subtree.left)
|
|
|
+# self.reverse(self, subtree.right)
|
|
|
+
|
|
|
+# 回溯通用模板
|
|
|
+# res = []
|
|
|
+#
|
|
|
+# def backtrack(路径, 选择列表):
|
|
|
+# if 满足结束条件:
|
|
|
+# res.append(路径)
|
|
|
+# return
|
|
|
+#
|
|
|
+# if 满足剪枝条件: return
|
|
|
+#
|
|
|
+# for 选择 in 选择列表:
|
|
|
+# 做选择
|
|
|
+# backtrack(路径, 选择列表)
|
|
|
+# 撤销选择
|