Ejemplo n.º 1
0
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)
Ejemplo n.º 5
0
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