diff --git a/.gitignore b/.gitignore index 6f69862..c56b2e4 100644 --- a/.gitignore +++ b/.gitignore @@ -116,5 +116,5 @@ Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/27a527fda8b54c6b/9_ADDBINARY.ipch Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/d00489e06883ba57/9_ ADDBINARY.ipch Alogrithm/TestResults/dc42f77d-a2f7-41a9-8b8c-1ee3f1a82eb9/林_MI-1 2021-01-18 14_12_23.coverage Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/86fa7a487ad3f37c/10_BINARYTREEPATHS.ipch -Alogrithm/.vs/Alogrithm/v16/TestStore/3/003.testlog Alogrithm/Alogrithm/Debug/10_BinaryTreePaths.obj +Alogrithm/.vs/Alogrithm/v16/TestStore/3/003.testlog diff --git a/Alogrithm/.vs/Alogrithm/v16/.suo b/Alogrithm/.vs/Alogrithm/v16/.suo index 589a0d5..1a5ce3c 100644 Binary files a/Alogrithm/.vs/Alogrithm/v16/.suo and b/Alogrithm/.vs/Alogrithm/v16/.suo differ diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj b/Alogrithm/Alogrithm/Alogrithm.vcxproj index 847bf41..28181ae 100644 --- a/Alogrithm/Alogrithm/Alogrithm.vcxproj +++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj @@ -86,8 +86,8 @@ Level3 true - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true + WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + false Console @@ -140,6 +140,7 @@ + @@ -152,6 +153,7 @@ + @@ -163,6 +165,7 @@ + diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters index 61f2f35..4857c43 100644 --- a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters +++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters @@ -54,6 +54,9 @@ 源文件\src + + 源文件\src + @@ -83,6 +86,9 @@ 头文件\include + + 头文件 + @@ -112,5 +118,8 @@ 资源文件\config + + 资源文件\config + \ No newline at end of file diff --git a/Alogrithm/Alogrithm/config/10_BinaryTreePaths.ini b/Alogrithm/Alogrithm/config/10_BinaryTreePaths.ini new file mode 100644 index 0000000..af8644e --- /dev/null +++ b/Alogrithm/Alogrithm/config/10_BinaryTreePaths.ini @@ -0,0 +1,19 @@ +[Test1] +Input=1,2,3,NULL,5 +Output=1->2->5,1->3 +[Test2] +Input=1,2,3,NULL,4,5 +Output=1->2->4,1->3->5 +[Test3] +input=1,0,0,2,NULL,NULL,0 +output=1->0->2,1->0->0 +[Test4] +input= +output= +[Test5] +input=4,3,1,NULL,2,6,8 +output=4->3->2,4->1->6,4->1->8 +[Test6] +input=1,3,5,7,NULL,2,9,NULL,2 +output=1->3->7->2,1->5->2,1->5->9 + diff --git a/Alogrithm/Alogrithm/include/10_BinaryTreePaths.h b/Alogrithm/Alogrithm/include/10_BinaryTreePaths.h new file mode 100644 index 0000000..693cf12 --- /dev/null +++ b/Alogrithm/Alogrithm/include/10_BinaryTreePaths.h @@ -0,0 +1,17 @@ +#pragma once +#include + +struct TreeNode3 +{ + int val; + struct TreeNode3* left; + struct TreeNode3* right; +}; + + + +void CreatBitTreeNode3(char str[][50], int return_count, TreeNode3* cur, int curIndex); +TreeNode3* CreatBitTree3(char str[][50], int return_count); +void get_path(char** array, struct TreeNode3* root, int* returnSize, int* buf, int local); +char** binaryTreePaths(struct TreeNode3* root, int* returnSize); +void free_tree3(TreeNode3* T); diff --git a/Alogrithm/Alogrithm/src/10_BinaryTreePaths.cpp b/Alogrithm/Alogrithm/src/10_BinaryTreePaths.cpp new file mode 100644 index 0000000..b6a5f01 --- /dev/null +++ b/Alogrithm/Alogrithm/src/10_BinaryTreePaths.cpp @@ -0,0 +1,89 @@ +#include "../include/10_BinaryTreePaths.h" + + +void CreatBitTreeNode3(char str[][50], int return_count, TreeNode3* cur, int curIndex) +{ + if (str == NULL || return_count <= 0 || cur == NULL || curIndex >= return_count || curIndex < 0) { + return; + } + int last = return_count - 1; + if ((2 * curIndex + 1 <= last) && strcmp(str[2 * curIndex + 1], "NULL")) { + cur->left = (TreeNode3*)malloc(sizeof(TreeNode3)); + if (NULL == cur->left) { + return; + } + cur->left->val = _ttoi(str[2 * curIndex + 1]); + } + else { + cur->left = NULL; + } + if ((2 * curIndex + 2 <= last) && strcmp(str[2 * curIndex + 2], "NULL")) { + cur->right = (TreeNode3*)malloc(sizeof(TreeNode3)); + if (NULL == cur->right) { + return; + } + cur->right->val = _ttoi(str[2 * curIndex + 2]); + } + else { + cur->right = NULL; + } + CreatBitTreeNode3(str, return_count, cur->left, 2 * curIndex + 1); + CreatBitTreeNode3(str, return_count, cur->right, 2 * curIndex + 2); +} +TreeNode3* CreatBitTree3(char str[][50], int return_count) +{ + if (str == NULL || return_count <= 0) { + return NULL; + } + TreeNode3* head = (TreeNode3*)malloc(sizeof(TreeNode3)); + if (NULL == head) { + return NULL; + } + head->val = _ttoi(str[0]); + CreatBitTreeNode3(str, return_count, head, 0); + return head; +} +void get_path(char** array, struct TreeNode3* root, int* returnSize, int* buf, int local) +{ + if (NULL == root) { + return; + } + if (!root->left && !root->right) { + char* str = (char*)malloc(1024); + int len = 0; + for (int i = 0; i < local; i++) + { + len += sprintf(str + len, "%d->", buf[i]); + } + sprintf(str + len, "%d", root->val); + array[(*returnSize)++] = str; + } + else { + buf[local++] = root->val; + get_path(array, root->left, returnSize, buf, local); + get_path(array, root->right, returnSize, buf, local); + } +} +char** binaryTreePaths(struct TreeNode3* root, int* returnSize) { + char** ret = (char**)malloc(sizeof(char*) * 1024);//һָ룬Ϊֵضάַ + *returnSize = 0;//άַԪظ + int buf[1024] = { 0 };//ջ + get_path(ret, root, returnSize, buf, 0); + return ret; +} +void free_tree3(TreeNode3* T)//ͷ +{ + if (!T) { + return; + } + if (T->left) { + free_tree3(T->left); + } + if (T->right) { + free_tree3(T->right); + } + if (T) { + free(T); + T = NULL; + } +} diff --git a/Alogrithm/Alogrithm/src/main.cpp b/Alogrithm/Alogrithm/src/main.cpp index 7490043..1427772 100644 --- a/Alogrithm/Alogrithm/src/main.cpp +++ b/Alogrithm/Alogrithm/src/main.cpp @@ -1,8 +1,8 @@ -#include "../include/2_ExcelSheetColumnTitle.h" -#include "../include/3_bool IsUgly.h" + + + int main() { - //ExcelSheetColumnTitle(10); - //printf("%d\n", IsUgly(6)); + return 0; } diff --git a/Alogrithm/UnitTest/UnitTest.cpp b/Alogrithm/UnitTest/UnitTest.cpp index 77122af..96dcdb0 100644 --- a/Alogrithm/UnitTest/UnitTest.cpp +++ b/Alogrithm/UnitTest/UnitTest.cpp @@ -11,6 +11,7 @@ using namespace Microsoft::VisualStudio::CppUnitTestFramework; #define FileName_7 "../Alogrithm/config/7_MaxDepth.ini" #define FileName_8 "../Alogrithm/config/8_HammingWeight.ini" #define FileName_9 "../Alogrithm/config/9_AddBinary.ini" +#define FileName_10 "../Alogrithm/config/10_BinaryTreePaths.ini" namespace UnitTest @@ -170,4 +171,35 @@ namespace UnitTest } } }; + TEST_CLASS(UnitTest_10) + { + TEST_METHOD(TestMethode1) + { + char Section_Name[100][10] = { 0 }; + int Section_Count = CalcCount(100, Section_Name, FileName_10); + CString Na, nExpect; + for (int i = 0; i < Section_Count; i++) { + GetPrivateProfileString(Section_Name[i], "input", " ", Na.GetBuffer(200), 200, FileName_10); + GetPrivateProfileString(Section_Name[i], "output", " ", nExpect.GetBuffer(500), 500, FileName_10); + char return_str[100][50] = { 0 }; + int return_count = str_device2(Na, return_str); + TreeNode3* root = CreatBitTree3(return_str, return_count); + int returnSize = 0; + char** returnStr=NULL; + returnStr = binaryTreePaths(root, &returnSize); + char nReal[500] = { 0 }; + for (int i = 0; i < returnSize; i++) + { + strcat(nReal, returnStr[i]); + if (i != (returnSize - 1)) + { + nReal[strlen(nReal)] = ','; + } + } + + Assert::AreEqual(nReal,nExpect); + free_tree3(root); + } + } + }; } diff --git a/Alogrithm/UnitTest/UnitTest.vcxproj b/Alogrithm/UnitTest/UnitTest.vcxproj index f96836e..e995603 100644 --- a/Alogrithm/UnitTest/UnitTest.vcxproj +++ b/Alogrithm/UnitTest/UnitTest.vcxproj @@ -103,7 +103,7 @@ Windows $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) DebugFull - ../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;%(AdditionalDependencies) + ../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;%(AdditionalDependencies) diff --git a/Alogrithm/UnitTest/pch.h b/Alogrithm/UnitTest/pch.h index 52a9d5c..017ccf5 100644 --- a/Alogrithm/UnitTest/pch.h +++ b/Alogrithm/UnitTest/pch.h @@ -22,6 +22,7 @@ #include"../Alogrithm/include/7_MaxDepth.h" #include"../Alogrithm/include/8_HammingWeight.h" #include"../Alogrithm/include/9_AddBinary.h" +#include"../Alogrithm/include/10_BinaryTreePaths.h" int CalcCount(int n, char(*str)[10],const char *FileName);