怎么在Python中创建一个二叉树 - 开发技术 - 亿速云
class node(): def __init__(self, k=None, l=None, r=None): self.val = k self.left = l self.right = r def create_tree(val, root): """ 终止条件是什么, 字符串用完 本次递归要干什么 本次递归返回给上一级是什么? :param val: :param root: :return: """ # 结束 if len(val) == 0: return root # 本次要干什么,生成中左右 if val[0] != '#': root = node(val[0]) val.pop(0) root.left = create_tree(val, root.left) root.right = create_tree(val, root.right) return root else: root = None val.pop(0) return root # 层序遍历 def levelorder(root): res = [] level = [root] while level: res.append([node.val for node in level]) temp = [] for node in level: temp.extend([node.left, node.right]) level = [leaf for leaf in temp if leaf] return res # 前序遍历 def preorderTraversal(now, result=[]): if now == None: return result result.append(now.val) preorderTraversal(now.left, result) preorderTraversal(now.right, result) return result # 中序遍历 def intermediateTraversal(now, result=[]): if now == None: return result intermediateTraversal(now.left, result) result.append(now.val) intermediateTraversal(now.right, result) return result # 后序遍历 def postorderTraversal(now, result=[]): if now == None: return postorderTraversal(now.left, result) postorderTraversal(now.right, result) result.append(now.val) return result if __name__ == '__main__': Root = None strs = "abc##d##e##" # 前序遍历扩展的二叉树序列 vals = list(strs) Roots = create_tree(vals, Root) # Roots就是我们要的二叉树的根节点。 res1 = levelorder(Roots) print(res1) res2 = preorderTraversal(Roots, result=[]) print(res2) res3 = intermediateTraversal(Roots, result=[]) print(res3) res4 = postorderTraversal(Roots, result=[]) print(res4)
二、求深度
# 用于生生一个类似于二叉树的数据 class Node: def __init__(self, value=None, left=None, right=None): self.value = value self.left = left self.right = right def tree_depth(tree): if tree is None: return 0 left_depth = tree_depth(tree.left) right_depth = tree_depth(tree.right) return left_depth + 1 if left_depth > right_depth else right_depth + 1 trr = Node('D', left=Node('B', Node('A'), Node('C')), right=Node('E', right=Node('G', Node('F')))) print(trr) a = tree_depth(trr) print(a)