def test_case3(self):
     nums = [6,5,8,1,3,7,11,None,None,None,None,None,None,9]
     answer = [6,3,8,1,5,7,11,None,None,None,None,None,None,9]
     root = TreeNode.generate_bt_from_list(nums)
     self.sol.recoverTree(root)
     compare = TreeNode.compare_tree(root, TreeNode.generate_bt_from_list(answer))
     self.assertTrue(compare)
 def test_case2(self):
     nums = [1,2]
     root = TreeNode.generate_bt_from_list(nums)
     answer = [1,2]
     self.sol.flatten(root)
     result = TreeNode.get_tree_right_list(root)
     self.assertEqual(answer, result)
 def test_case1(self):
     nums = [3,1,2]
     answer = [2,1,3]
     root = TreeNode.generate_bt_from_list(nums)
     self.sol.recoverTree(root)
     compare = TreeNode.compare_tree(root, TreeNode.generate_bt_from_list(answer))
     self.assertTrue(compare)
 def test_case1(self):
     nums = [1, 2, 5, 3, 4, None, 6]
     root = TreeNode.generate_bt_from_list(nums)
     answer = [1, 2, 3, 4, 5, 6]
     self.sol.flatten(root)
     result = TreeNode.get_tree_right_list(root)
     self.assertEqual(answer, result)
 def test_case1(self):
     nums = [1, 2, 3, 4, 5]
     #answer = [3,1,4,None,2, None,5] # -- array way
     answer = [3, 2, 5, 1, None, 4]  # -- list way
     result = self.sol.sortedListToBST(ListNode.parseArray2List(nums))
     self.assertEqual(
         True,
         TreeNode.compare_tree(result,
                               TreeNode.generate_bt_from_list(answer)))
 def test_case11(self):  #===>
     nums = "98,97,#,88,#,84,#,79,87,64,#,#,#,63,69,62,#,#,#,30,#,27,59,9,#,#,#,3,#,0,#,-4,#,-16,#,-18,-7,-19,#,#,#,-23,#,-34,#,-42,#,-59,#,-63,#,-64,#,-69,#,-75,#,-81"
     answer = "98,#,97,#,88,#,84,#,79,#,64,#,63,#,62,#,30,#,27,#,9,#,3,#,0,#,-4,#,-16,#,-18,#,-19,#,-23,#,-34,#,-42,#,-59,#,-63,#,-64,#,-69,#,-75,#,-81,#,-7,#,59,#,69,#,87"
     from util.tree_node import TreeNode
     root = TreeNode.generate_bt_from_string_standard(nums)
     answer_tree = TreeNode.generate_bt_from_string_standard(answer)
     self.sol.flatten(root)
     compare = TreeNode.compare_tree(root, answer_tree)
     self.assertTrue(compare)
 def test_case11(self):  #===>
     nums = "98,97,#,88,#,84,#,79,87,64,#,#,#,63,69,62,#,#,#,30,#,27,59,9,#,#,#,3,#,0,#,-4,#,-16,#,-18,-7,-19,#,#,#,-23,#,-34,#,-42,#,-59,#,-63,#,-64,#,-69,#,-75,#,-81"
     answer = "98,#,97,#,88,#,84,#,79,#,64,#,63,#,62,#,30,#,27,#,9,#,3,#,0,#,-4,#,-16,#,-18,#,-19,#,-23,#,-34,#,-42,#,-59,#,-63,#,-64,#,-69,#,-75,#,-81,#,-7,#,59,#,69,#,87"
     from util.tree_node import TreeNode
     root = TreeNode.generate_bt_from_string_standard(nums)
     answer_tree = TreeNode.generate_bt_from_string_standard(answer)
     self.sol.flatten(root)
     compare = TreeNode.compare_tree(root, answer_tree)
     self.assertTrue(compare)
 def test_case1(self):
     preorder = "abc"
     inorder = "bac"
     answer = TreeNode("a")
     answer.left = TreeNode("b")
     answer.right = TreeNode("c")
     result = self.sol.buildTree(preorder, inorder)
     compare = TreeNode.compare_tree(answer, result)
     self.assertTrue(compare)
 def gen_tree(self, nums, left, right):
     if left > right:
         return None
     if left == right:
         return TreeNode(nums[left])
     mid = left + int((right - left) / 2)
     root = TreeNode(nums[mid])
     root.left = self.gen_tree(nums, left, mid - 1)
     root.right = self.gen_tree(nums, mid + 1, right)
     return root
 def helper(self, left, right):
     if left>right:
         return None
     if left==right:
         return TreeNode(self.nums[left])
     mid = (left+right) / 2
     root = TreeNode(self.nums[mid])
     root.left = self.helper(left, mid-1)
     root.right = self.helper(mid+1, right)
     return root
 def gen_tree(self, nums, left, right):
     if left > right:
         return None
     if left == right:
         return TreeNode(nums[left])
     mid = left + int((right - left) / 2)
     root = TreeNode(nums[mid])
     root.left = self.gen_tree(nums, left, mid - 1)
     root.right = self.gen_tree(nums, mid + 1, right)
     return root
 def helper(self, left, right):
     if left > right:
         return None
     if left == right:
         return TreeNode(self.nums[left])
     mid = (left + right) / 2
     root = TreeNode(self.nums[mid])
     root.left = self.helper(left, mid - 1)
     root.right = self.helper(mid + 1, right)
     return root
Beispiel #13
0
    def __delete(self, node: TreeNode, index, item):
        if node is None:
            return node

        if item < node.value:
            node.left = self.__delete(node.left, index, item)
        elif item > node.value:
            node.right = self.__delete(node.right, index, item)
        elif index != node.index:
            node.left = self.__delete(node.left, index, item)
            node.right = self.__delete(node.right, index, item)
        else:
            if node.left is None or node.right is None:
                tmp_node = None
                if tmp_node == node.left:
                    tmp_node = node.right
                else:
                    tmp_node = node.left

                if tmp_node is None:
                    tmp_node = node
                    node = None
                else:
                    node = tmp_node
            else:
                tmp_node = self.__min_value_node(node.right)
                TreeNode.copy_to(tmp_node, node)
                node.right = self.__delete(node.right, tmp_node.index,
                                           tmp_node.value)

        if node is None:
            return node

        node.height = max(self.__height(node.left), self.__height(
            node.right)) + 1

        balance = self.__balance(node)

        if balance > 1 and self.__balance(node) >= 0:
            return self.__right_rotate(node)

        if balance > 1 and self.__balance(node.left) < 0:
            node.left = self.__left_rotate(node.left)
            return self.__right_rotate(node)

        if balance < -1 and self.__balance(node.right) <= 0:
            return self.__left_rotate(node)

        if balance < -1 and self.__balance(node.right) > 0:
            node.right = self.__right_rotate(node.right)
            return self.__left_rotate(node)

        self.__ajust_min_index(node)

        return node
 def generateBST(self, head, start, end):
     if start>end:
         return None
     mid = start + (end-start)/2
     left = self.generateBST(head, start, mid-1)
     root = TreeNode(head[0].val)
     head[0] = head[0].next
     right = self.generateBST(head, mid+1, end)
     root.left = left
     root.right = right
     return root
Beispiel #15
0
 def build_max(self, A, start, end):
     if start > end:
         return None
     idx = start
     for i in range(start, end+1):
         if A[i] > A[idx]:
             idx = i
     root = TreeNode(A[idx])
     root.left = self.build_max(A, start, idx-1)
     root.right = self.build_max(A, idx+1, end)
     return root
Beispiel #16
0
 def build_max(self, A, start, end):
     if start > end:
         return None
     idx = start
     for i in range(start, end + 1):
         if A[i] > A[idx]:
             idx = i
     root = TreeNode(A[idx])
     root.left = self.build_max(A, start, idx - 1)
     root.right = self.build_max(A, idx + 1, end)
     return root
 def helper(self, preorder, inorder, l1, r1, l2, r2):
     if l1 > r1:
         return None
     root = TreeNode(preorder[l1])
     idx = l2
     while idx <= r2 and inorder[idx] != preorder[l1]:
         idx += 1
     lsize = idx - l2
     root.left = self.helper(preorder, inorder, l1 + 1, l1 + lsize, l2, idx)
     root.right = self.helper(preorder, inorder, l1 + lsize + 1, r1, idx + 1, r2)
     return root
Beispiel #18
0
 def generateBST(self, head, start, end):
     if start > end:
         return None
     mid = start + (end - start) / 2
     left = self.generateBST(head, start, mid - 1)
     root = TreeNode(head[0].val)
     head[0] = head[0].next
     right = self.generateBST(head, mid + 1, end)
     root.left = left
     root.right = right
     return root
 def arr_to_tree(self, arr, left, right):
     if not arr:
         return None
     if left==right:
         return TreeNode(arr[left])
     if left>right:
         return None
     mid = (left+right)/2
     root = TreeNode(arr[mid])
     root.left = self.arr_to_tree(arr,left,mid-1)
     root.right = self.arr_to_tree(arr,mid+1,right)
     return root
 def helper(self, preorder, inorder, l1, r1, l2, r2):
     if l1 > r1:
         return None
     root = TreeNode(preorder[l1])
     idx = l2
     while idx <= r2 and inorder[idx] != preorder[l1]:
         idx += 1
     lsize = idx - l2
     root.left = self.helper(preorder, inorder, l1 + 1, l1 + lsize, l2, idx)
     root.right = self.helper(preorder, inorder, l1 + lsize + 1, r1,
                              idx + 1, r2)
     return root
 def build_tree_rec(self, root_idx, in_left, in_right):
     if in_left > in_right:
         return None
     root = TreeNode(self.preorder[root_idx])
     if in_left == in_right:
         return root
     in_root = self.inorder.index(self.preorder[root_idx])
     left_length = in_root - in_left
     right_length = in_right - in_root
     root.left = self.build_tree_rec(root_idx+1, in_root-left_length, in_root-1)
     root.right = self.build_tree_rec(root_idx+1+left_length,in_root+1,in_right)
     return root
Beispiel #22
0
 def helper(self, inorder, left, right, postorder, pl, pr):
     if left>right: #need this, otherwise wrong for case1
         return None
     if left == right:
         return TreeNode(inorder[left])
     root_val = postorder[pr]
     root = TreeNode(root_val)
     root_idx = inorder.index(root_val)
     right_len = right-root_idx
     root.left = self.helper(inorder, left, root_idx-1, postorder, pl, pr-right_len-1)
     root.right = self.helper(inorder, root_idx+1, right, postorder, pr-right_len, pr-1)
     return root
 def arr_to_tree(self, arr, left, right):
     if not arr:
         return None
     if left == right:
         return TreeNode(arr[left])
     if left > right:
         return None
     mid = (left + right) / 2
     root = TreeNode(arr[mid])
     root.left = self.arr_to_tree(arr, left, mid - 1)
     root.right = self.arr_to_tree(arr, mid + 1, right)
     return root
Beispiel #24
0
 def maxTree(self, A): # ref, use stack to track the decreasing part
     if not A:
         return None
     stack = []
     for i in range(len(A)):
         cur = TreeNode(A[i])
         while stack and stack[-1].val < cur.val:  # if use if here, wrong for case 1
             cur.left = stack.pop()
         if stack:
             stack[-1].right = cur
         stack.append(cur)
     return stack[0]
 def helper(self, head, tail):
     if head==tail:
         return None
     fast = head
     slow = head
     while fast.next != tail and fast.next.next!=tail:
         fast = fast.next.next
         slow = slow.next
     root = TreeNode(slow.val)
     root.left = self.helper(head, slow)
     root.right = self.helper(slow.next, tail)
     return root
Beispiel #26
0
 def helper(self, head, tail):
     if head == tail:
         return None
     fast = head
     slow = head
     while fast.next != tail and fast.next.next != tail:
         fast = fast.next.next
         slow = slow.next
     root = TreeNode(slow.val)
     root.left = self.helper(head, slow)
     root.right = self.helper(slow.next, tail)
     return root
Beispiel #27
0
 def maxTree(self, A):  # ref, use stack to track the decreasing part
     if not A:
         return None
     stack = []
     for i in range(len(A)):
         cur = TreeNode(A[i])
         while stack and stack[
                 -1].val < cur.val:  # if use if here, wrong for case 1
             cur.left = stack.pop()
         if stack:
             stack[-1].right = cur
         stack.append(cur)
     return stack[0]
 def to_bst(self, head, tail):
     if head is None or head==tail: # should move head==tail here, because tail is not included, otherwise wrong.
         return None
     elif head.next == tail:
         return TreeNode(head.val)
     fast = slow = head
     while fast != tail and fast.next!=tail:
         fast = fast.next.next
         slow = slow.next
     root = TreeNode(slow.val)
     root.left = self.to_bst(head, slow)
     root.right = self.to_bst(slow.next, tail)
     return root
 def to_bst(self, head, tail):
     if head is None or head == tail:  # should move head==tail here, because tail is not included, otherwise wrong.
         return None
     elif head.next == tail:
         return TreeNode(head.val)
     fast = slow = head
     while fast != tail and fast.next != tail:
         fast = fast.next.next
         slow = slow.next
     root = TreeNode(slow.val)
     root.left = self.to_bst(head, slow)
     root.right = self.to_bst(slow.next, tail)
     return root
 def build_tree_rec(self, root_idx, in_left, in_right):
     if in_left > in_right:
         return None
     root = TreeNode(self.preorder[root_idx])
     if in_left == in_right:
         return root
     in_root = self.inorder.index(self.preorder[root_idx])
     left_length = in_root - in_left
     right_length = in_right - in_root
     root.left = self.build_tree_rec(root_idx + 1, in_root - left_length,
                                     in_root - 1)
     root.right = self.build_tree_rec(root_idx + 1 + left_length,
                                      in_root + 1, in_right)
     return root
        def helper(arr):
            if len(arr) == 0:
                return [None]
            ret = []
            for i in range(0, len(arr)):
                left = helper(arr[:i])
                right = helper(arr[i + 1:])

                for j in left:
                    for k in right:
                        dummy = TreeNode(arr[i])
                        dummy.left = j
                        dummy.right = k
                        ret.append(dummy)
            return ret
    def sortedListToBSTr(self, start, end):
        if start > end:
            return None

        # mid
        mid = (start + end) / 2

        left = self.sortedListToBSTr(start, mid - 1)
        root = TreeNode(Solution.h.val)
        Solution.h = Solution.h.next_node
        right = self.sortedListToBSTr(mid + 1, end)

        root.left = left
        root.right = right
        return root
    def sortedListToBSTr(self, start, end):
        if start > end:
            return None

        # mid
        mid = (start + end) / 2

        left = self.sortedListToBSTr(start, mid - 1)
        root = TreeNode(Solution.h.val)
        Solution.h = Solution.h.next_node
        right = self.sortedListToBSTr(mid + 1, end)

        root.left = left
        root.right = right
        return root
Beispiel #34
0
 def test_case2(
     self
 ):  # ===> this case means that node value can be negative, and the purpose is to search a single path
     root = TreeNode.generate_bt_from_string('2,#,-1,null,#')
     answer = 2
     result = self.sol.maxPathSum(root)
     self.assertEqual(answer, result)
    def dfs(self, start, end):
        if start > end: return [None]
        res = []
        for rootval in range(start, end+1):

            LeftTree = self.dfs(start, rootval-1)
            RightTree = self.dfs(rootval+1, end)
            for i in LeftTree:

                for j in RightTree:

                    root = TreeNode(rootval)
                    root.left = i
                    root.right = j
                    res.append(root)
        return res
Beispiel #36
0
 def test_case2(self):
     nums = [5, 3, 6, 2, 4, None, 7]
     target = 28
     root = TreeNode.generate_bt_from_list(nums)
     answer = False
     result = self.sol.findTarget(root, target)
     self.assertEqual(answer, result)
Beispiel #37
0
 def test_case02(self):
     nums = [2,1]
     k = 1
     root = TreeNode.generate_bt_from_list(nums)
     answer = 1
     result = self.sol.kthSmallest(root, k)
     self.assertEqual(answer, result)
Beispiel #38
0
 def test_case1(self):
     nums = [1,None,2]
     k = 2
     root = TreeNode.generate_bt_from_list(nums)
     answer = 2
     result = self.sol.kthSmallest(root, k)
     self.assertEqual(answer, result)
Beispiel #39
0
 def test_case1(self):
     n = 22
     root = TreeNode.generate_bt_from_string(
         "5,#,4,8,#,11,null,13,4,#,7,2,null,null,5,1,#")
     answer = [[5, 4, 11, 2], [5, 8, 4, 5]]
     result = self.sol.pathSum(root, n)
     self.assertEqual(answer, result)
    def dfs(self, start, end):
        if start > end: return [None]
        res = []
        for rootval in range(start, end + 1):

            LeftTree = self.dfs(start, rootval - 1)
            RightTree = self.dfs(rootval + 1, end)
            for i in LeftTree:

                for j in RightTree:

                    root = TreeNode(rootval)
                    root.left = i
                    root.right = j
                    res.append(root)
        return res
Beispiel #41
0
 def test_case3(
     self
 ):  #=====> need to check that all the vals in subtree also smaller or greater than the ROOT val!!
     nums = [10, 5, 15, None, None, 6, 20]
     answer = False
     result = self.sol.isValidBST(TreeNode.generate_bt_from_list(nums))
     self.assertEqual(answer, result)
Beispiel #42
0
 def buildTree_mle(self, inorder, postorder): #memory limit exceed for case2
     """
     :type inorder: List[int]
     :type postorder: List[int]
     :rtype: TreeNode
     """
     if not inorder:
         return None
     if len(inorder) == 1:
         return TreeNode(inorder[0])
     root_val = postorder[-1]
     root = TreeNode(root_val)
     idx = inorder.index(root_val)
     root.left = self.buildTree(inorder[:idx], postorder[0:idx])
     root.right = self.buildTree(inorder[idx+1:], postorder[idx:-1])
     return root
 def dfs_gen_tree(self, start, end):
     if start > end:
         print "Bigger start: ", start, end
         return [None] # need to be [None], not [] here
     if start == end:
         return [TreeNode(start)]
     result = []
     for i in range(start, end+1):
         left_children = self.dfs_gen_tree(start, i-1)
         right_children = self.dfs_gen_tree(i+1, end)
         for lc in left_children:
             for rc in right_children:
                 root = TreeNode(i)
                 root.left = lc
                 root.right =rc
                 result.append(root)
     return result
 def dfs_gen_tree(self, start, end):
     if start > end:
         print "Bigger start: ", start, end
         return [None]  # need to be [None], not [] here
     if start == end:
         return [TreeNode(start)]
     result = []
     for i in range(start, end + 1):
         left_children = self.dfs_gen_tree(start, i - 1)
         right_children = self.dfs_gen_tree(i + 1, end)
         for lc in left_children:
             for rc in right_children:
                 root = TreeNode(i)
                 root.left = lc
                 root.right = rc
                 result.append(root)
     return result
Beispiel #45
0
 def test_case2(self): #====> memory limit exceed
     inorder = [
         -999,-998,-997,-996,-995,-994,-993,-992,-991,-990,-989,-988,-987,-986,-985,-984,-983,-982,-981,-980,-979,-978,-977,-976,-975,-974,-973,-972,-971,-970,-969,-968,-967,-966,-965,-964,-963,-962,-961,-960,-959,-958,-957,-956,-955,-954,-953,-952,-951,-950,-949,-948,-947,-946,-945,-944,-943,-942,-941,-940,-939,-938,-937,-936,-935,-934,-933,-932,-931,-930,-929,-928,-927,-926,-925,-924,-923,-922,-921,-920,-919,-918,-917,-916,-915,-914,-913,-912,-911,-910,-909,-908,-907,-906,-905,-904,-903,-902,-901,-900,-899,-898,-897,-896,-895,-894,-893,-892,-891,-890,-889,-888,-887,-886,-885,-884,-883,-882,-881,-880,-879,-878,-877,-876,-875,-874,-873,-872,-871,-870,-869,-868,-867,-866,-865,-864,-863,-862,-861,-860,-859,-858,-857,-856,-855,-854,-853,-852,-851,-850,-849,-848,-847,-846,-845,-844,-843,-842,-841,-840,-839,-838,-837,-836,-835,-834,-833,-832,-831,-830,-829,-828,-827,-826,-825,-824,-823,-822,-821,-820,-819,-818,-817,-816,-815,-814,-813,-812,-811,-810,-809,-808,-807,-806,-805,-804,-803,-802,-801,-800,-799,-798,-797,-796,-795,-794,-793,-792,-791,-790,-789,-788,-787,-786,-785,-784,-783,-782,-781,-780,-779,-778,-777,-776,-775,-774,-773,-772,-771,-770,-769,-768,-767,-766,-765,-764,-763,-762,-761,-760,-759,-758,-757,-756,-755,-754,-753,-752,-751,-750,-749,-748,-747,-746,-745,-744,-743,-742,-741,-740,-739,-738,-737,-736,-735,-734,-733,-732,-731,-730,-729,-728,-727,-726,-725,-724,-723,-722,-721,-720,-719,-718,-717,-716,-715,-714,-713,-712,-711,-710,-709,-708,-707,-706,-705,-704,-703,-702,-701,-700,-699,-698,-697,-696,-695,-694,-693,-692,-691,-690,-689,-688,-687,-686,-685,-684,-683,-682,-681,-680,-679,-678,-677,-676,-675,-674,-673,-672,-671,-670,-669,-668,-667,-666,-665,-664,-663,-662,-661,-660,-659,-658,-657,-656,-655,-654,-653,-652,-651,-650,-649,-648,-647,-646,-645,-644,-643,-642,-641,-640,-639,-638,-637,-636,-635,-634,-633,-632,-631,-630,-629,-628,-627,-626,-625,-624,-623,-622,-621,-620,-619,-618,-617,-616,-615,-614,-613,-612,-611,-610,-609,-608,-607,-606,-605,-604,-603,-602,-601,-600,-599,-598,-597,-596,-595,-594,-593,-592,-591,-590,-589,-588,-587,-586,-585,-584,-583,-582,-581,-580,-579,-578,-577,-576,-575,-574,-573,-572,-571,-570,-569,-568,-567,-566,-565,-564,-563,-562,-561,-560,-559,-558,-557,-556,-555,-554,-553,-552,-551,-550,-549,-548,-547,-546,-545,-544,-543,-542,-541,-540,-539,-538,-537,-536,-535,-534,-533,-532,-531,-530,-529,-528,-527,-526,-525,-524,-523,-522,-521,-520,-519,-518,-517,-516,-515,-514,-513,-512,-511,-510,-509,-508,-507,-506,-505,-504,-503,-502,-501,-500,-499,-498,-497,-496,-495,-494,-493,-492,-491,-490,-489,-488,-487,-486,-485,-484,-483,-482,-481,-480,-479,-478,-477,-476,-475,-474,-473,-472,-471,-470,-469,-468,-467,-466,-465,-464,-463,-462,-461,-460,-459,-458,-457,-456,-455,-454,-453,-452,-451,-450,-449,-448,-447,-446,-445,-444,-443,-442,-441,-440,-439,-438,-437,-436,-435,-434,-433,-432,-431,-430,-429,-428,-427,-426,-425,-424,-423,-422,-421,-420,-419,-418,-417,-416,-415,-414,-413,-412,-411,-410,-409,-408,-407,-406,-405,-404,-403,-402,-401,-400,-399,-398,-397,-396,-395,-394,-393,-392,-391,-390,-389,-388,-387,-386,-385,-384,-383,-382,-381,-380,-379,-378,-377,-376,-375,-374,-373,-372,-371,-370,-369,-368,-367,-366,-365,-364,-363,-362,-361,-360,-359,-358,-357,-356,-355,-354,-353,-352,-351,-350,-349,-348,-347,-346,-345,-344,-343,-342,-341,-340,-339,-338,-337,-336,-335,-334,-333,-332,-331,-330,-329,-328,-327,-326,-325,-324,-323,-322,-321,-320,-319,-318,-317,-316,-315,-314,-313,-312,-311,-310,-309,-308,-307,-306,-305,-304,-303,-302,-301,-300,-299,-298,-297,-296,-295,-294,-293,-292,-291,-290,-289,-288,-287,-286,-285,-284,-283,-282,-281,-280,-279,-278,-277,-276,-275,-274,-273,-272,-271,-270,-269,-268,-267,-266,-265,-264,-263,-262,-261,-260,-259,-258,-257,-256,-255,-254,-253,-252,-251,-250,-249,-248,-247,-246,-245,-244,-243,-242,-241,-240,-239,-238,-237,-236,-235,-234,-233,-232,-231,-230,-229,-228,-227,-226,-225,-224,-223,-222,-221,-220,-219,-218,-217,-216,-215,-214,-213,-212,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182,-181,-180,-179,-178,-177,-176,-175,-174,-173,-172,-171,-170,-169,-168,-167,-166,-165,-164,-163,-162,-161,-160,-159,-158,-157,-156,-155,-154,-153,-152,-151,-150,-149,-148,-147,-146,-145,-144,-143,-142,-141,-140,-139,-138,-137,-136,-135,-134,-133,-132,-131,-130,-129,-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000]
     postorder = [
         -999,-998,-997,-996,-995,-994,-993,-992,-991,-990,-989,-988,-987,-986,-985,-984,-983,-982,-981,-980,-979,-978,-977,-976,-975,-974,-973,-972,-971,-970,-969,-968,-967,-966,-965,-964,-963,-962,-961,-960,-959,-958,-957,-956,-955,-954,-953,-952,-951,-950,-949,-948,-947,-946,-945,-944,-943,-942,-941,-940,-939,-938,-937,-936,-935,-934,-933,-932,-931,-930,-929,-928,-927,-926,-925,-924,-923,-922,-921,-920,-919,-918,-917,-916,-915,-914,-913,-912,-911,-910,-909,-908,-907,-906,-905,-904,-903,-902,-901,-900,-899,-898,-897,-896,-895,-894,-893,-892,-891,-890,-889,-888,-887,-886,-885,-884,-883,-882,-881,-880,-879,-878,-877,-876,-875,-874,-873,-872,-871,-870,-869,-868,-867,-866,-865,-864,-863,-862,-861,-860,-859,-858,-857,-856,-855,-854,-853,-852,-851,-850,-849,-848,-847,-846,-845,-844,-843,-842,-841,-840,-839,-838,-837,-836,-835,-834,-833,-832,-831,-830,-829,-828,-827,-826,-825,-824,-823,-822,-821,-820,-819,-818,-817,-816,-815,-814,-813,-812,-811,-810,-809,-808,-807,-806,-805,-804,-803,-802,-801,-800,-799,-798,-797,-796,-795,-794,-793,-792,-791,-790,-789,-788,-787,-786,-785,-784,-783,-782,-781,-780,-779,-778,-777,-776,-775,-774,-773,-772,-771,-770,-769,-768,-767,-766,-765,-764,-763,-762,-761,-760,-759,-758,-757,-756,-755,-754,-753,-752,-751,-750,-749,-748,-747,-746,-745,-744,-743,-742,-741,-740,-739,-738,-737,-736,-735,-734,-733,-732,-731,-730,-729,-728,-727,-726,-725,-724,-723,-722,-721,-720,-719,-718,-717,-716,-715,-714,-713,-712,-711,-710,-709,-708,-707,-706,-705,-704,-703,-702,-701,-700,-699,-698,-697,-696,-695,-694,-693,-692,-691,-690,-689,-688,-687,-686,-685,-684,-683,-682,-681,-680,-679,-678,-677,-676,-675,-674,-673,-672,-671,-670,-669,-668,-667,-666,-665,-664,-663,-662,-661,-660,-659,-658,-657,-656,-655,-654,-653,-652,-651,-650,-649,-648,-647,-646,-645,-644,-643,-642,-641,-640,-639,-638,-637,-636,-635,-634,-633,-632,-631,-630,-629,-628,-627,-626,-625,-624,-623,-622,-621,-620,-619,-618,-617,-616,-615,-614,-613,-612,-611,-610,-609,-608,-607,-606,-605,-604,-603,-602,-601,-600,-599,-598,-597,-596,-595,-594,-593,-592,-591,-590,-589,-588,-587,-586,-585,-584,-583,-582,-581,-580,-579,-578,-577,-576,-575,-574,-573,-572,-571,-570,-569,-568,-567,-566,-565,-564,-563,-562,-561,-560,-559,-558,-557,-556,-555,-554,-553,-552,-551,-550,-549,-548,-547,-546,-545,-544,-543,-542,-541,-540,-539,-538,-537,-536,-535,-534,-533,-532,-531,-530,-529,-528,-527,-526,-525,-524,-523,-522,-521,-520,-519,-518,-517,-516,-515,-514,-513,-512,-511,-510,-509,-508,-507,-506,-505,-504,-503,-502,-501,-500,-499,-498,-497,-496,-495,-494,-493,-492,-491,-490,-489,-488,-487,-486,-485,-484,-483,-482,-481,-480,-479,-478,-477,-476,-475,-474,-473,-472,-471,-470,-469,-468,-467,-466,-465,-464,-463,-462,-461,-460,-459,-458,-457,-456,-455,-454,-453,-452,-451,-450,-449,-448,-447,-446,-445,-444,-443,-442,-441,-440,-439,-438,-437,-436,-435,-434,-433,-432,-431,-430,-429,-428,-427,-426,-425,-424,-423,-422,-421,-420,-419,-418,-417,-416,-415,-414,-413,-412,-411,-410,-409,-408,-407,-406,-405,-404,-403,-402,-401,-400,-399,-398,-397,-396,-395,-394,-393,-392,-391,-390,-389,-388,-387,-386,-385,-384,-383,-382,-381,-380,-379,-378,-377,-376,-375,-374,-373,-372,-371,-370,-369,-368,-367,-366,-365,-364,-363,-362,-361,-360,-359,-358,-357,-356,-355,-354,-353,-352,-351,-350,-349,-348,-347,-346,-345,-344,-343,-342,-341,-340,-339,-338,-337,-336,-335,-334,-333,-332,-331,-330,-329,-328,-327,-326,-325,-324,-323,-322,-321,-320,-319,-318,-317,-316,-315,-314,-313,-312,-311,-310,-309,-308,-307,-306,-305,-304,-303,-302,-301,-300,-299,-298,-297,-296,-295,-294,-293,-292,-291,-290,-289,-288,-287,-286,-285,-284,-283,-282,-281,-280,-279,-278,-277,-276,-275,-274,-273,-272,-271,-270,-269,-268,-267,-266,-265,-264,-263,-262,-261,-260,-259,-258,-257,-256,-255,-254,-253,-252,-251,-250,-249,-248,-247,-246,-245,-244,-243,-242,-241,-240,-239,-238,-237,-236,-235,-234,-233,-232,-231,-230,-229,-228,-227,-226,-225,-224,-223,-222,-221,-220,-219,-218,-217,-216,-215,-214,-213,-212,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182,-181,-180,-179,-178,-177,-176,-175,-174,-173,-172,-171,-170,-169,-168,-167,-166,-165,-164,-163,-162,-161,-160,-159,-158,-157,-156,-155,-154,-153,-152,-151,-150,-149,-148,-147,-146,-145,-144,-143,-142,-141,-140,-139,-138,-137,-136,-135,-134,-133,-132,-131,-130,-129,-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000]
     answer = self.sol.buildTree_mle(inorder, postorder)
     result = self.sol.buildTree(inorder, postorder)
     self.assertTrue(TreeNode.compare_tree(answer, result))
Beispiel #46
0
 def test_case4(
     self
 ):  # not necessarily rob by level, see this case, can skip the level
     nums = [4, 1, None, 2, None, None, None, 3]
     root = TreeNode.generate_bt_from_list(nums)
     answer = 7
     result = self.sol.rob(root)
     self.assertEqual(answer, result)
Beispiel #47
0
 def _add_helper(self, node, val):
     if not node:
         raise ValueError("Unable to attach node to None")
     else:
         if node.val > val:
             if not node.left:
                 node.left = TreeNode(val)
             else:
                 self._add_helper(node.left, val)
         elif node.val < val:
             if not node.right:
                 node.right = TreeNode(val)
             else:
                 self._add_helper(node.right, val)
         else:
             raise ValueError('Node with value %s already exist in tree' %
                              val)
 def test_case1(self):
     nums = [3,9,20,None,None,15,7]
     answer = [
       [3],
       [9,20],
       [15,7]
     ]
     result = self.sol.levelOrder(TreeNode.generate_bt_from_list(nums))
     self.assertEqual(answer, result)
    def buildTree_corret_but_exceed(self, preorder, inorder):# ====> Memory Limit Exceeded on case2, and local saids "maximum recursion depth exceeded", need to increase recursion limit
        """
        :type preorder: List[int]
        :type inorder: List[int]
        :rtype: TreeNode
        """
        if preorder is None or inorder is None or len(preorder) != len(inorder) or len(preorder) < 1:
            return None

        root = TreeNode(preorder[0])
        if len(preorder) == 1:
            return TreeNode(preorder[0])
        idx = inorder.index(preorder[0])
        left_len = idx
        right_len = len(inorder) - 1 - idx
        root.left = self.buildTree(preorder[1:1+left_len], inorder[0: idx])
        root.right = self.buildTree(preorder[1+left_len:], inorder[idx+1:])
        return root
 def test_case1(self):
     nums = [1,2,3,4,5]
     #answer = [3,1,4,None,2, None,5] # -- array way
     answer = [3,2,5,1, None,4] # -- list way
     result = self.sol.sortedListToBST(ListNode.parseArray2List(nums))
     self.assertEqual(True, TreeNode.compare_tree(result,TreeNode.generate_bt_from_list(answer)))
 def test_case1(self):
     nums = ListNode.parseArray2List([1,2,3,4,5,6,7])
     answer = TreeNode.generate_bt_from_list([4,2,6,1,3,5,7])
     result = self.sol.sortedListToBST(nums)
     self.assertTrue(TreeNode.compare_tree(answer, result))
Beispiel #52
0
 def test_case1(self):
     A = [6,4,20]
     answer = "20,6,#,#,4"            # wrong output "6,#,20,4"
     result = self.sol.maxTree(A)
     answer_tree = TreeNode.generate_bt_from_string_standard(answer)
     self.assertTrue(TreeNode.compare_tree(answer_tree, result))