// 10 // / \ // 5 12 // /\ // 4 7 // Two paths with sum 22 void Test1() { BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode12 = CreateBinaryTreeNode(12); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); ConnectTreeNodes(pNode10, pNode5, pNode12); ConnectTreeNodes(pNode5, pNode4, pNode7); printf("Two paths should be found in Test1.\n"); Test("Test1", pNode10, 22); DestroyTree(pNode10); }
// 5 // / // 4 // / // 3 // / // 2 // / // 1 void Test2() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); ConnectTreeNodes(pNode5, pNode4, NULL); ConnectTreeNodes(pNode4, pNode3, NULL); ConnectTreeNodes(pNode3, pNode2, NULL); ConnectTreeNodes(pNode2, pNode1, NULL); Test("Test2", pNode5); DestroyList(pNode1); }
// 1 // \ // 2 // \ // 3 // \ // 4 // \ // 5 void Test5() { BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); ConnectTreeNodes(pNode1, NULL, pNode2); ConnectTreeNodes(pNode2, NULL, pNode3); ConnectTreeNodes(pNode3, NULL, pNode4); ConnectTreeNodes(pNode4, NULL, pNode5); Test("Test5", pNode1, false); DestroyTree(pNode1); }
// 只有一个 void Test_32_2_4() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); Test_32_2("Test_32_2_4", pNode5); DestroyTree(pNode5); }
void Test16() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); Test("Test16", pNode5, NULL); DestroyTree(pNode5); }
// ====================测试代码==================== // 测试完全二叉树:除了叶子节点,其他节点都有两个子节点 // 8 // 6 10 // 5 7 9 11 void Test1() { printf("=====Test1 starts:=====\n"); BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11); ConnectTreeNodes(pNode8, pNode6, pNode10); ConnectTreeNodes(pNode6, pNode5, pNode7); ConnectTreeNodes(pNode10, pNode9, pNode11); PrintTree(pNode8); printf("=====Test1: MirrorRecursively=====\n"); MirrorRecursively(pNode8); PrintTree(pNode8); printf("=====Test1: MirrorIteratively=====\n"); MirrorIteratively(pNode8); PrintTree(pNode8); DestroyTree(pNode8); }
// 8 // 6 10 // 5 7 9 11 void TestA() { BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11); ConnectTreeNodes(pNode8, pNode6, pNode10); ConnectTreeNodes(pNode6, pNode5, pNode7); ConnectTreeNodes(pNode10, pNode9, pNode11); Test("TestA0", pNode8, 0, true, -1); Test("TestA1", pNode8, 1, false, 5); Test("TestA2", pNode8, 2, false, 6); Test("TestA3", pNode8, 3, false, 7); Test("TestA4", pNode8, 4, false, 8); Test("TestA5", pNode8, 5, false, 9); Test("TestA6", pNode8, 6, false, 10); Test("TestA7", pNode8, 7, false, 11); Test("TestA8", pNode8, 8, true, -1); DestroyTree(pNode8); printf("\n\n"); }
// ====================测试代码==================== // 8 // 6 10 // 5 7 9 11 void Test1() { BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11); ConnectTreeNodes(pNode8, pNode6, pNode10); ConnectTreeNodes(pNode6, pNode5, pNode7); ConnectTreeNodes(pNode10, pNode9, pNode11); printf("====Test1 Begins: ====\n"); printf("Expected Result is:\n"); printf("8 \n"); printf("10 6 \n"); printf("5 7 9 11 \n\n"); printf("Actual Result is: \n"); Print(pNode8); printf("\n"); DestroyTree(pNode8); }
// 2 // 3 // 4 // 5 void Test12_15() { BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); ConnectTreeNodes(pNode2, NULL, pNode3); ConnectTreeNodes(pNode3, NULL, pNode4); ConnectTreeNodes(pNode4, NULL, pNode5); Test("Test12", pNode5, NULL); Test("Test13", pNode4, pNode5); Test("Test14", pNode3, pNode4); Test("Test15", pNode2, pNode3); DestroyTree(pNode2); }
// 5 // 4 // 3 // 2 void Test8_11() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); ConnectTreeNodes(pNode5, pNode4, NULL); ConnectTreeNodes(pNode4, pNode3, NULL); ConnectTreeNodes(pNode3, pNode2, NULL); Test("Test8", pNode5, NULL); Test("Test9", pNode4, pNode5); Test("Test10", pNode3, pNode4); Test("Test11", pNode2, pNode3); DestroyTree(pNode5); }
// 1 // \ // 2 // \ // 3 // \ // 4 // \ // 5 // 没有路径上面的结点和为16 void Test4() { BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); ConnectTreeNodes(pNode1, NULL, pNode2); ConnectTreeNodes(pNode2, NULL, pNode3); ConnectTreeNodes(pNode3, NULL, pNode4); ConnectTreeNodes(pNode4, NULL, pNode5); printf("No paths should be found in Test4.\n"); Test("Test4", pNode1, 16); DestroyTree(pNode1); }
// 5 // / // 4 // / // 3 // / // 2 // / // 1 // 有一条路径上面的结点和为15 void Test3() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); ConnectTreeNodes(pNode5, pNode4, NULL); ConnectTreeNodes(pNode4, pNode3, NULL); ConnectTreeNodes(pNode3, pNode2, NULL); ConnectTreeNodes(pNode2, pNode1, NULL); printf("One path should be found in Test3.\n"); Test("Test3", pNode5, 15); DestroyTree(pNode5); }
// 5 // / // 4 // / // 3 // / // 2 // / // 1 // 有一条路径上面的结点和为15 void Test_34_3() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); ConnectTreeNodes(pNode5, pNode4, nullptr); ConnectTreeNodes(pNode4, pNode3, nullptr); ConnectTreeNodes(pNode3, pNode2, nullptr); ConnectTreeNodes(pNode2, pNode1, nullptr); printf("One path should be found in Test_34_3.\n"); Test_34("Test_34_3", pNode5, 15); DestroyTree(pNode5); }
// 1 // \ // 2 // \ // 3 // \ // 4 // \ // 5 // 没有路径上面的结点和为16 void Test_34_4() { BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); ConnectTreeNodes(pNode1, nullptr, pNode2); ConnectTreeNodes(pNode2, nullptr, pNode3); ConnectTreeNodes(pNode3, nullptr, pNode4); ConnectTreeNodes(pNode4, nullptr, pNode5); printf("No paths should be found in Test_34_4.\n"); Test_34("Test_34_4", pNode1, 16); DestroyTree(pNode1); }
// 树中只有1个结点 void Test5() { BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); printf("One path should be found in Test5.\n"); Test("Test5", pNode1, 1); DestroyTree(pNode1); }
// 100 // / // 50 // \ // 150 void Test6() { BinaryTreeNode* pNode100 = CreateBinaryTreeNode(100); BinaryTreeNode* pNode50 = CreateBinaryTreeNode(50); BinaryTreeNode* pNode150 = CreateBinaryTreeNode(150); ConnectTreeNodes(pNode100, pNode50, nullptr); ConnectTreeNodes(pNode50, nullptr, pNode150); printf("====Test6 Begins: ====\n"); printf("Expected Result is:\n"); printf("100 \n"); printf("50 \n"); printf("150 \n\n"); printf("Actual Result is: \n"); Print(pNode100); printf("\n"); }
// There is only one node in a tree void TestD() { BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); Test("TestD0", pNode1, 0, true, -1); Test("TestD1", pNode1, 1, false, 1); Test("TestD2", pNode1, 2, true, -1); DestroyTree(pNode1); printf("\n\n"); }
void Test4() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); printf("====Test4 Begins: ====\n"); printf("Expected Result is:\n"); printf("5 \n\n"); printf("Actual Result is: \n"); Print(pNode5); printf("\n"); DestroyTree(pNode5); }
// 测试只有一个结点的二叉树 void Test5() { printf("=====Test5 starts:=====\n"); BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); PrintTree(pNode8); printf("=====Test4: MirrorRecursively=====\n"); MirrorRecursively(pNode8); PrintTree(pNode8); printf("=====Test4: MirrorIteratively=====\n"); MirrorIteratively(pNode8); PrintTree(pNode8); }
// 5 // 4 // 3 // 2 void Test2() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); ConnectTreeNodes(pNode5, pNode4, nullptr); ConnectTreeNodes(pNode4, pNode3, nullptr); ConnectTreeNodes(pNode3, pNode2, nullptr); printf("====Test2 Begins: ====\n"); printf("Expected Result is:\n"); printf("5 \n"); printf("4 \n"); printf("3 \n"); printf("2 \n\n"); printf("Actual Result is: \n"); Print(pNode5); printf("\n"); DestroyTree(pNode5); }
// 5 // / \ // 3 3 // / \ // 4 4 // / \ // 6 2 // / \ // 1 1 void Test5() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode31 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode32 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode41 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode42 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode22 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode12 = CreateBinaryTreeNode(1); ConnectTreeNodes(pNode5, pNode31, pNode32); ConnectTreeNodes(pNode31, pNode41, NULL); ConnectTreeNodes(pNode32, NULL, pNode42); ConnectTreeNodes(pNode41, pNode6, NULL); ConnectTreeNodes(pNode42, NULL, pNode22); ConnectTreeNodes(pNode6, pNode11, NULL); ConnectTreeNodes(pNode22, NULL, pNode12); Test("Test5", pNode5, false); DestroyTree(pNode5); }
// 5 // / \ // 3 3 // / \ // 4 4 // / \ // 2 2 // / \ // 1 1 void Test4() { BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode31 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode32 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode41 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode42 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode21 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode22 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode12 = CreateBinaryTreeNode(1); ConnectTreeNodes(pNode5, pNode31, pNode32); ConnectTreeNodes(pNode31, pNode41, NULL); ConnectTreeNodes(pNode32, NULL, pNode42); ConnectTreeNodes(pNode41, pNode21, NULL); ConnectTreeNodes(pNode42, NULL, pNode22); ConnectTreeNodes(pNode21, pNode11, NULL); ConnectTreeNodes(pNode22, NULL, pNode12); Test("Test4", pNode5, true); DestroyTree(pNode5); }
void Test_32_2_1() { BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11); ConnectTreeNodes(pNode8, pNode6, pNode10); ConnectTreeNodes(pNode6, pNode5, pNode7); ConnectTreeNodes(pNode10, pNode9, pNode11); Test_32_2("Test_32_2_1", pNode8); DestroyTree(pNode8); }
// 8 // 10 6 // 11 9 7 5 void Test6() { BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11); BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); ConnectTreeNodes(pNode8, pNode10, pNode6); ConnectTreeNodes(pNode10, pNode11, pNode9); ConnectTreeNodes(pNode6, pNode7, pNode5); Test("Test6", pNode8, 1); DestroyTree(pNode8); }
// 8 // 6 9 // 5 7 7 5 void Test2() { BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode61 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9); BinaryTreeNode* pNode51 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode71 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode72 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode52 = CreateBinaryTreeNode(5); ConnectTreeNodes(pNode8, pNode61, pNode9); ConnectTreeNodes(pNode61, pNode51, pNode71); ConnectTreeNodes(pNode9, pNode72, pNode52); Test("Test2", pNode8, false); DestroyTree(pNode8); }
// 8 // 6 6 // 5 7 7 5 void Test1() { BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode61 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode62 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode51 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode71 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode72 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode52 = CreateBinaryTreeNode(5); ConnectTreeNodes(pNode8, pNode61, pNode62); ConnectTreeNodes(pNode61, pNode51, pNode71); ConnectTreeNodes(pNode62, pNode72, pNode52); Test("Test1", pNode8, true); DestroyTree(pNode8); }
// 完全二叉树 // 1 // / \ // 2 3 // /\ / \ // 4 5 6 7 void Test1() { BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); ConnectTreeNodes(pNode1, pNode2, pNode3); ConnectTreeNodes(pNode2, pNode4, pNode5); ConnectTreeNodes(pNode3, pNode6, pNode7); Test("Test1", pNode1, true); DestroyTree(pNode1); }
// 10 // / \ // 6 14 // /\ /\ // 4 8 12 16 void Test1() {88 BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode14 = CreateBinaryTreeNode(14); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode12 = CreateBinaryTreeNode(12); BinaryTreeNode* pNode16 = CreateBinaryTreeNode(16); ConnectTreeNodes(pNode10, pNode6, pNode14); ConnectTreeNodes(pNode6, pNode4, pNode8); ConnectTreeNodes(pNode14, pNode12, pNode16); Test("Test1", pNode10); DestroyList(pNode4); }
// 8 // 6 6 // 5 7 7 void Test3() { BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode61 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode62 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode51 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode71 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode72 = CreateBinaryTreeNode(7); ConnectTreeNodes(pNode8, pNode61, pNode62); ConnectTreeNodes(pNode61, pNode51, pNode71); ConnectTreeNodes(pNode62, pNode72, NULL); Test("Test3", pNode8, false); DestroyTree(pNode8); }
// 不是平衡二叉树 // 1 // / \ // 2 3 // /\ // 4 5 // / // 6 void Test3() { BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); ConnectTreeNodes(pNode1, pNode2, pNode3); ConnectTreeNodes(pNode2, pNode4, pNode5); ConnectTreeNodes(pNode5, pNode6, NULL); Test("Test3", pNode1, false); DestroyTree(pNode1); }