Tree107BinaryTreeLevelOrderTraversal2

9/24/2016第二遍写了,还是写了20min还想不起来recursive怎么写了

思路

  • BFS: Still write into the result list level by level, but use addFirst() to add them in to reverse the final result
  • Recursive DFS: 用了单独一个function来完成recursive. 其中忘记了逻辑漏洞

Logic Flaws

  • 同样错误第二次犯当在ResultList上直接改的时候,别忘记了如果那个item不存在,需要自己create,不能直接改哦。
好的,我了解了你的要求。下面是二叉树的链表实现及其基本功能的代码实现: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class BinaryTree: def __init__(self, root=None): self.root = root # 建立二叉树 def buildTree(self, nodes): if not nodes: return None val = nodes.pop(0) if val is None: return None root = TreeNode(val) root.left = self.buildTree(nodes) root.right = self.buildTree(nodes) return root # 前序遍历二叉树 def preorderTraversal(self, root): if not root: return print(root.val, end=' ') self.preorderTraversal(root.left) self.preorderTraversal(root.right) # 中序遍历二叉树 def inorderTraversal(self, root): if not root: return self.inorderTraversal(root.left) print(root.val, end=' ') self.inorderTraversal(root.right) # 后序遍历二叉树 def postorderTraversal(self, root): if not root: return self.postorderTraversal(root.left) self.postorderTraversal(root.right) print(root.val, end=' ') # 按层序遍历二叉树 def levelorderTraversal(self, root): if not root: return queue = [root] while queue: node = queue.pop(0) print(node.val, end=' ') if node.left: queue.append(node.left) if node.right: queue.append(node.right) # 求二叉树的深度 def depth(self, root): if not root: return 0 left_depth = self.depth(root.left) right_depth = self.depth(root.right) return max(left_depth, right_depth) + 1 # 求指定结点到根的路径 def path(self, root, val, path_list): if not root: return False path_list.append(root.val) if root.val == val: return True if (root.left and self.path(root.left, val, path_list)) or (root.right and self.path(root.right, val, path_list)): return True path_list.pop() return False # 二叉树的销毁 def destroy(self, root): if not root: return self.destroy(root.left) self.destroy(root.right) del root # 自定义操作 def customOperation(self, root): # 自定义操作的实现 pass if __name__ == '__main__': nodes = [1, 2, 4, None, None, 5, None, None, 3, None, 6, None, None] binaryTree = BinaryTree() binaryTree.root = binaryTree.buildTree(nodes) print('前序遍历:', end='') binaryTree.preorderTraversal(binaryTree.root) print() print('中序遍历:', end='') binaryTree.inorderTraversal(binaryTree.root) print() print('后序遍历:', end='') binaryTree.postorderTraversal(binaryTree.root) print() print('按层序遍历:', end='') binaryTree.levelorderTraversal(binaryTree.root) print() print('二叉树深度:', binaryTree.depth(binaryTree.root)) path_list = [] binaryTree.path(binaryTree.root, 5, path_list) print('指定结点到根的路径:', path_list) binaryTree.destroy(binaryTree.root) ``` 在这个代码实现中,我们使用 TreeNode 类来创建二叉树的结点,使用 BinaryTree 类来实现二叉树的链表实现并实现了二叉树的各种基本功能。在测试的 main() 函数中,我们首先使用一个列表来表示二叉树的结点,然后调用 BinaryTree 类中的 buildTree() 方法来构造二叉树,接着分别调用其他方法来测试二叉树的各种功能。最后,我们调用 destroy() 方法来销毁二叉树。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值