from BinaryTree.SymmetricTree.Recursive101 import Solution as SymTree_recursive from BinaryTree.SymmetricTree.Iterative101 import Solution as SymTree_iterative import BinaryTree.TreeNodeModule as tn testcase = tn.stringToTreeNode("[1,2,2,3,4,4,3]") ans = True testcase2 = tn.stringToTreeNode("[1,2,2,null,3,null,3]") ans2 = False testcase3 = tn.stringToTreeNode("[1,2,2,3,4,4,3,5,6,7,8,8,7,6,5]") ans3 = True testcase4 = tn.stringToTreeNode("[]") ans4 = True testcase5 = tn.stringToTreeNode("[1]") ans5 = True def test_SymmetricTreeRecursive(): assert SymTree_recursive().isSymmetric(testcase) == ans assert SymTree_recursive().isSymmetric(testcase2) == ans2 assert SymTree_recursive().isSymmetric(testcase3) == ans3 assert SymTree_recursive().isSymmetric(testcase4) == ans4 assert SymTree_recursive().isSymmetric(testcase5) == ans5 def test_SymmetricTreeIterative(): assert SymTree_iterative().isSymmetric(testcase) == ans assert SymTree_iterative().isSymmetric(testcase2) == ans2
from BinaryTree.PathSum.Naive112 import Solution as PathSum_Naive import BinaryTree.TreeNodeModule as tn testcase1 = tn.stringToTreeNode("[5,4,8,11,null,13,4,7,2,null,null,null,1]") sum1 = 22 ans1 = True testcase2 = [] sum2 = 1 ans2 = False testcase3 = tn.stringToTreeNode("[-2,null,-3]") sum3 = -5 ans3 = True def test_PathSumNaive(): assert PathSum_Naive().hasPathSum(testcase1, sum1) == ans1 assert PathSum_Naive().hasPathSum(testcase2, sum2) == ans2 assert PathSum_Naive().hasPathSum(testcase3, sum3) == ans3
from BinaryTree.MaximumDepthofBinaryTree.TopDown104 import Solution as TopDown import BinaryTree.TreeNodeModule as tn ''' 3 / \ 9 20 / \ 15 7 ''' testTree = tn.stringToTreeNode("[3,9,20,null,null,15,7]") depthAns = 3 testTree2 = tn.stringToTreeNode("[]") depthAns2 = 0 testTree3 = tn.stringToTreeNode("[1]") depthAns3 = 1 def test_TopDown(): assert TopDown().maxDepth(testTree) == depthAns assert TopDown().maxDepth(testTree2) == depthAns2 assert TopDown().maxDepth(testTree3) == depthAns3 from BinaryTree.MaximumDepthofBinaryTree.BottomUp104 import Solution as BottomUp def test_BottomUp(): assert BottomUp().maxDepth(testTree) == depthAns assert BottomUp().maxDepth(testTree2) == depthAns2 assert BottomUp().maxDepth(testTree3) == depthAns3
from BinaryTree.LowestCommonAncestorofaBinaryTree.Naive236 import Solution as LCA_naive import BinaryTree.TreeNodeModule as tn testtree1 = tn.stringToTreeNode("[3,5,1,6,2,0,8,null,null,7,4]") p1 = tn.TreeNode(5) q1 = tn.TreeNode(1) ans1 = 3 testtree2 = tn.stringToTreeNode("[3,5,1,6,2,0,8,null,null,7,4]") p2 = tn.TreeNode(5) q2 = tn.TreeNode(4) ans2 = 5 def test_LCA_naive(): assert LCA_naive().lowestCommonAncestor(testtree1, p1, q1).val == ans1 assert LCA_naive().lowestCommonAncestor(testtree2, p2, q2).val == ans2
import BinaryTree.TreeNodeModule as tn from BinaryTree.BinaryTreePreorderTraversal.Recursive144 import Solution as preorder_recursive from BinaryTree.BinaryTreePreorderTraversal.Iterative144 import Solution as preorder_iterative testcase = [] ''' 1 \ 2 / 3 ''' testcase.append(tn.stringToTreeNode("[1,null,2,3]")) ''' None ''' testcase.append(tn.stringToTreeNode("[]")) ''' 2 / 3 / 1 ''' testcase.append(tn.stringToTreeNode("[2,3,null,1]")) ''' 3 / \ 1 2 ''' testcase.append(tn.stringToTreeNode("[3,1,2]"))
from BinaryTree.BinaryTreePaths.Iterative257 import Solution as iterative from BinaryTree.BinaryTreePaths.Recursive257 import Solution as recursive import BinaryTree.TreeNodeModule as tn testtree = tn.stringToTreeNode("[1,2,3,null,5]") ans = ["1->2->5", "1->3"] def test_iterative(): assert iterative().binaryTreePaths(testtree) == ans def test_recursive(): assert recursive().binaryTreePaths(testtree) == ans
import BinaryTree.TreeNodeModule as tn from BinaryTree.BinaryTreeLevelOrderTraversal.BFS102 import Solution as levelorder_BFS testcase = [] ''' 3 / \ 9 20 / \ 15 7 ''' testcase.append(tn.stringToTreeNode("[3,9,20,null,null,15,7]")) ''' None ''' testcase.append(tn.stringToTreeNode("[]")) levelOrderAns = [] levelOrderAns.append([[3], [9, 20], [15, 7]]) levelOrderAns.append([]) def test_BFS_LevelOrder(): for num, case in enumerate(testcase): assert levelorder_BFS().levelOrder(case) == levelOrderAns[num]
from BinaryTree.MinimumDepthOfBinaryTree.BFS111 import Solution as BFS import BinaryTree.TreeNodeModule as tn raw_testcase = [("[]", 0), ("[1]", 1), ("[3,9,20,null,null,15,7]", 2)] testcase = [(tn.stringToTreeNode(treeStr), ans) for treeStr, ans in raw_testcase] def test_BFS(): for root, ans in testcase: assert BFS().minDepth(root) == ans
from BinaryTree.ConstructBinaryTreefromPreorderandInorderTraversal.DivideAndConquer105 import Solution as PreInOrder_DC from BinaryTree.ConstructBinaryTreefromInorderandPostorderTraversal.DivideAndConquer106 import Solution as InPostOrder_DC import BinaryTree.TreeNodeModule as tn inorder = [9, 3, 15, 20, 7] preorder = [3, 9, 20, 15, 7] postorder = [9, 15, 7, 20, 3] treeAns = tn.stringToTreeNode("[3,9,20,null,null,15,7]") inorder2 = [] preorder2 = [] postorder2 = [] treeAns2 = tn.stringToTreeNode("[]") # 1 # 4 # 2 # 3 inorder3 = [1, 2, 3, 4] preorder3 = [1, 4, 2, 3] postorder3 = [3, 2, 4, 1] treeAns3 = tn.stringToTreeNode("[1,null,4,2,null,null,3]") def test_PreorderAndInorderDivideAndConquer(): assert tn.treeNodeToList(PreInOrder_DC().buildTree( preorder, inorder)) == tn.treeNodeToList(treeAns) assert tn.treeNodeToList(PreInOrder_DC().buildTree( preorder2, inorder2)) == tn.treeNodeToList(treeAns2) assert tn.treeNodeToList(PreInOrder_DC().buildTree(
from BinaryTree.ValidateBinarySearchTree.InorderTraversal098 import Solution as inorder from BinaryTree.ValidateBinarySearchTree.DFS098 import Solution as dfs import BinaryTree.TreeNodeModule as tn testBST = [] testBST.append(tn.stringToTreeNode("[2,1,3]")) testBST.append(tn.stringToTreeNode("[1,1]")) testBST.append(tn.stringToTreeNode("[5,1,4,null,null,3,6]")) answer = [] answer.append(True) answer.append(False) answer.append(False) def test_inorderTraversal(): for i, case in enumerate(testBST): assert inorder().isValidBST(case) == answer[i] def test_dfs(): for i, case in enumerate(testBST): assert dfs().isValidBST(case) == answer[i]