def build_tree_assist(ps, pe, ins, ine): if (ps >= pe or ins >= ine): return None root = TreeNode(preorder[ps]) root_pos = in_map[root.val] root.left = build_tree_assist(ps + 1, ps + root_pos - ins + 1, ins, root_pos) root.right = build_tree_assist(ps + root_pos - ins + 1, pe, root_pos + 1, ine) return root
def build_tree(expression): if not expression: return None else: signi = expression.pop() root = TreeNode(signi) if signi in '+-*/': root.right = build_tree(expression) root.left = build_tree(expression) return root
def build_tree(trs): if not trs: return None else: val = trs.pop(0) if val == '#': return None else: root = TreeNode(val) root.left = build_tree(trs) root.right = build_tree(trs) return root
def build_tree(pre, post): if len(pre) == 1: return TreeNode(pre[0]) elif pre and post: root = TreeNode(pre[0]) pre_index = pre.index(post[-2]) post_index = post.index(pre[1]) left_pre = pre[1:pre_index] left_post = post[:post_index + 1] right_pre = pre[pre_index:] right_post = post[post_index + 1:len(pre) - 1] if left_pre and left_post: root.left = build_tree(left_pre, left_post) root.right = build_tree(right_pre, right_post) elif not left_pre: root.left = build_tree(right_pre, left_post) else: root.right = build_tree(left_pre, right_post) return root else: return None
def gen_tree(s, e): if s >= e: return [None] else: all_trees = [] for i in range(s, e): left = gen_tree(s, i) right = gen_tree(i + 1, e) for l in left: for r in right: rooti = TreeNode(i) rooti.left = l rooti.right = r all_trees.append(rooti) return all_trees
def parse_str(start, end): if start < end: i = start while i < end and s[i] not in '()': i += 1 cur_node = TreeNode(int(s[start:i])) if i + 1 < end: left_start, left_end = i + 1, record[i] cur_node.left = parse_str(left_start, left_end) if left_end < end - 1: right_start, right_end = left_end + 2, record[left_end + 1] cur_node.right = parse_str(right_start, right_end) return cur_node else: return None