def main(self):
     root = [3,5,1,6,2,0,8,None,None,7,4]
     p = TreeNode(5)
     q = TreeNode(1)
     root = Tree().build_tree_from_level_recur_list(root)
     Tree().mid_recur_tree(root)
     self.lowestCommonAncestor(root, p, q)
 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
Exemple #4
0
 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
Exemple #5
0
 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
Exemple #7
0
 def insert(root, val):
     if not root:
         return TreeNode(val)
     if root.val == val:
         return root
     if val < root.val:
         root.left = insert(root.left, val)
     else:
         root.right = insert(root.right, val)
     return root
Exemple #8
0
 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
Exemple #9
0
 def main(self):
     root = [6, 2, 8, 0, 4, 7, 9, None, None, 3, 5]
     p = TreeNode(2)
     q = TreeNode(8)
     root = Tree().build_tree_from_list(root)
     self.lowestCommonAncestor(root, p, q)