123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #列表函数
- 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(路径, 选择列表)
- # 撤销选择
|