示例#1
0
    def test_reject_traversals_of_different_length(self):
        preorder = ["a", "b"]
        inorder = ["b", "a", "r"]

        with self.assertRaises(ValueError) as err:
            tree_from_traversals(preorder, inorder)
        self.assertEqual(type(err.exception), ValueError)
        self.assertEqual(err.exception.args[0],
                         "traversals must have the same length")
示例#2
0
    def test_reject_traversals_with_repeated_items(self):
        preorder = ["a", "b", "a"]
        inorder = ["b", "a", "a"]

        with self.assertRaises(ValueError) as err:
            tree_from_traversals(preorder, inorder)
        self.assertEqual(type(err.exception), ValueError)
        self.assertEqual(err.exception.args[0],
                         "traversals must contain unique items")
示例#3
0
    def test_reject_inconsistent_traversals_of_same_length(self):
        preorder = ["x", "y", "z"]
        inorder = ["a", "b", "c"]

        with self.assertRaises(ValueError) as err:
            tree_from_traversals(preorder, inorder)
        self.assertEqual(type(err.exception), ValueError)
        self.assertEqual(err.exception.args[0],
                         "traversals must have the same elements")
示例#4
0
 def test_tree_with_many_items(self):
     preorder = ["a", "i", "x", "f", "r"]
     inorder = ["i", "a", "f", "x", "r"]
     expected = {
         "v": "a",
         "l": {
             "v": "i",
             "l": {},
             "r": {}
         },
         "r": {
             "v": "x",
             "l": {
                 "v": "f",
                 "l": {},
                 "r": {}
             },
             "r": {
                 "v": "r",
                 "l": {},
                 "r": {}
             }
         }
     }
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#5
0
 def test_tree_with_many_items(self):
     preorder = ["a", "i", "x", "f", "r"]
     inorder = ["i", "a", "f", "x", "r"]
     expected = {
         "v": "a",
         "l": {
             "v": "i",
             "l": {},
             "r": {}
         },
         "r": {
             "v": "x",
             "l": {
                 "v": "f",
                 "l": {},
                 "r": {}
             },
             "r": {
                 "v": "r",
                 "l": {},
                 "r": {}
             }
         }
     }
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#6
0
 def test_tree_with_one_item(self):
     preorder = ["a"]
     inorder = ["a"]
     expected = {
         "v": "a",
         "l": {},
         "r": {}
     }
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#7
0
 def test_tree_with_many_more_items1(self):
     preorder = ['f', 'b', 'a', 'd', 'c', 'e', 'g', 'i', 'h']
     inorder = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
     #
     #
     # . . . . F . . . .
     #      /    \
     # . B . . .  G
     # /  \        \
     # A . D . . .  I
     #    / \      /
     # . C . E . H
     #
     expected = {
         "v": "f",
         "l": {
             "v": "b",
             "l": {
                 "v": "a",
                 "l": {},
                 "r": {}
             },
             "r": {
                 "v": "d",
                 "l": {
                     "v": "c",
                     "l": {},
                     "r": {}
                 },
                 "r": {
                     "v": "e",
                     "l": {},
                     "r": {}
                 }
             }
         },
         "r": {
             "v": "g",
             "l": {},
             "r": {
                 "v": "i",
                 "l": {
                     "v": "h",
                     "l": {},
                     "r": {}
                 },
                 "r": {}
             },
         },
     }
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#8
0
 def test_tree_with_many_more_items2(self):
     preorder = ['+', '*', 'a', '-', 'b', 'c', '/', 'd', 'e']
     inorder = ['a', '*', 'b', '-', 'c', '+', 'd', '/', 'e']
     expected = {
         "v": "+",
         "l": {
             "v": "*",
             "l": {
                 "v": "a",
                 "l": {},
                 "r": {}
             },
             "r": {
                 "v": "-",
                 "l": {
                     "v": "b",
                     "l": {},
                     "r": {}
                 },
                 "r": {
                     "v": "c",
                     "l": {},
                     "r": {}
                 }
             },
         },
         "r": {
             "v": "/",
             "l": {
                 "v": "d",
                 "l": {},
                 "r": {}
             },
             "r": {
                 "v": "e",
                 "l": {},
                 "r": {}
             },
         },
     }
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
    def test_bigger_tree(self):
        preorder = ["a", "m", "n", "o", "p", "q", "x", "f", "r"]
        inorder = ["n", "m", "p", "o", "q", "a", "f", "x", "r"]

        expected = {
            "v": "a",
            "l": {
                "v": "m",
                "l": {"v": "n", "l": {}, "r": {}},
                "r": {
                    "v": "o",
                    "l": {"v": "p", "l": {}, "r": {}},
                    "r": {"v": "q", "l": {}, "r": {}},
                },
            },
            "r": {
                "v": "x",
                "l": {"v": "f", "l": {}, "r": {}},
                "r": {"v": "r", "l": {}, "r": {}},
            },
        }
        self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#10
0
 def test_reject_inconsistent_traversals_of_same_length(self):
     preorder = ["x", "y", "z"]
     inorder = ["a", "b", "c"]
     with self.assertRaisesWithMessage(ValueError):
         tree_from_traversals(preorder, inorder)
示例#11
0
 def test_reject_traverals_of_different_length(self):
     preorder = ["a", "b"]
     inorder = ["b", "a", "r"]
     with self.assertRaisesWithMessage(ValueError):
         tree_from_traversals(preorder, inorder)
示例#12
0
 def test_tree_with_one_item(self):
     preorder = ["a"]
     inorder = ["a"]
     expected = {"v": "a", "l": {}, "r": {}}
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#13
0
 def test_empty_tree(self):
     preorder = []
     inorder = []
     expected = {}
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#14
0
 def test_reject_traverals_with_repeated_items(self):
     preorder = ["a", "b", "a"]
     inorder = ["b", "a", "a"]
     with self.assertRaisesWithMessage(ValueError):
         tree_from_traversals(preorder, inorder)
示例#15
0
 def test_reject_traverals_of_different_length(self):
     preorder = ["a", "b"]
     inorder = ["b", "a", "r"]
     with self.assertRaisesWithMessage(ValueError):
         tree_from_traversals(preorder, inorder)
示例#16
0
 def test_reject_traverals_with_repeated_items(self):
     preorder = ["a", "b", "a"]
     inorder = ["b", "a", "a"]
     with self.assertRaisesWithMessage(ValueError):
         tree_from_traversals(preorder, inorder)
示例#17
0
 def test_empty_tree(self):
     preorder = []
     inorder = []
     expected = {}
     self.assertEqual(tree_from_traversals(preorder, inorder), expected)
示例#18
0
 def test_reject_inconsistent_traversals_of_same_length(self):
     preorder = ["x", "y", "z"]
     inorder = ["a", "b", "c"]
     with self.assertRaisesWithMessage(ValueError):
         tree_from_traversals(preorder, inorder)