def datasets(): ns = [TreeNode(i) for i in [8, 6, 10, 5, 7, 9, 11]] ns[0].left, ns[0].right = ns[1], ns[2] ns[1].left, ns[1].right = ns[3], ns[4] ns[4].left, ns[4].right = ns[5], ns[6] ns_r = [TreeNode(i) for i in [8, 6, 10, 5, 7, 9, 11]] ns_r[0].right, ns_r[0].left = ns_r[1], ns_r[2] ns_r[1].right, ns_r[1].left = ns_r[3], ns_r[4] ns_r[4].right, ns_r[4].left = ns_r[5], ns_r[6] return ns, ns_r
def construct_helper(pre_order, in_order, pre_start, pre_end, in_start, in_end): if pre_start > pre_end: return index = -1 for (i, num) in enumerate(in_order): if num == pre_order[pre_start]: index = i break if index == -1: raise RuntimeError(u"错误的输入") root = TreeNode(pre_order[index]) left_length = index - in_start root.left = construct_helper(pre_order, in_order, pre_start + 1, pre_start + left_length, in_start, index - 1) root.right = construct_helper(pre_order, in_order, pre_start + left_length + 1, pre_end, index + 1, in_end) return root
right = get_depth_of_tree(root.right) return left + 1 if left > right else right + 1 def is_balanced_tree(root): if not root: return True, 0 left, left_depth = is_balanced_tree(root.left) right, right_depth = is_balanced_tree(root.right) return left and right and abs( left_depth - right_depth) <= 1, \ left_depth + 1 if left_depth > right_depth else right_depth + 1 if __name__ == '__main__': node1 = TreeNode(1) node2 = TreeNode(2) node3 = TreeNode(3) node4 = TreeNode(4) node5 = TreeNode(5) node6 = TreeNode(6) node7 = TreeNode(7) node1.left = node2 node1.right = node3 node2.left = node4 node2.right = node5 node3.left = node6 node3.right = node7 print get_depth_of_tree(node1) print is_balanced_tree(node1)
def helper(root, n, val, nodes): val += root.val nodes.append(root) if not root.left and not root.right: if val == n: for node in nodes: print node.val, print "\n" nodes.pop() return if root.left: helper(root.left, n, val, nodes) if root.right: helper(root.right, n, val, nodes) nodes.pop() if __name__ == '__main__': node1 = TreeNode(10) node2 = TreeNode(5) node3 = TreeNode(12) node4 = TreeNode(4) node5 = TreeNode(7) node6 = TreeNode(6) node7 = TreeNode(7) node1.left = node2 node1.right = node3 node2.left = node4 node2.right = node5 print_path_of_n(node1, 22)
def datasets(): ns = [TreeNode(i) for i in [8, 8, 7, 9, 2, 4, 7]] ns[0].left, ns[0].right = ns[1], ns[2] ns[1].left, ns[1].right = ns[3], ns[4] ns[4].left, ns[4].right = ns[5], ns[6] return ns