parent
							
								
									11f9f38f78
								
							
						
					
					
						commit
						04c2f91688
					
				
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								@ -0,0 +1,135 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
				
			||||||
 | 
					  <ItemGroup Label="ProjectConfigurations">
 | 
				
			||||||
 | 
					    <ProjectConfiguration Include="Debug|Win32">
 | 
				
			||||||
 | 
					      <Configuration>Debug</Configuration>
 | 
				
			||||||
 | 
					      <Platform>Win32</Platform>
 | 
				
			||||||
 | 
					    </ProjectConfiguration>
 | 
				
			||||||
 | 
					    <ProjectConfiguration Include="Release|Win32">
 | 
				
			||||||
 | 
					      <Configuration>Release</Configuration>
 | 
				
			||||||
 | 
					      <Platform>Win32</Platform>
 | 
				
			||||||
 | 
					    </ProjectConfiguration>
 | 
				
			||||||
 | 
					    <ProjectConfiguration Include="Debug|x64">
 | 
				
			||||||
 | 
					      <Configuration>Debug</Configuration>
 | 
				
			||||||
 | 
					      <Platform>x64</Platform>
 | 
				
			||||||
 | 
					    </ProjectConfiguration>
 | 
				
			||||||
 | 
					    <ProjectConfiguration Include="Release|x64">
 | 
				
			||||||
 | 
					      <Configuration>Release</Configuration>
 | 
				
			||||||
 | 
					      <Platform>x64</Platform>
 | 
				
			||||||
 | 
					    </ProjectConfiguration>
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					  <PropertyGroup Label="Globals">
 | 
				
			||||||
 | 
					    <VCProjectVersion>17.0</VCProjectVersion>
 | 
				
			||||||
 | 
					    <Keyword>Win32Proj</Keyword>
 | 
				
			||||||
 | 
					    <ProjectGuid>{dde1957c-ab2a-4b80-9928-5904dad85fe3}</ProjectGuid>
 | 
				
			||||||
 | 
					    <RootNamespace>My20231023</RootNamespace>
 | 
				
			||||||
 | 
					    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
				
			||||||
 | 
					  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
				
			||||||
 | 
					    <ConfigurationType>Application</ConfigurationType>
 | 
				
			||||||
 | 
					    <UseDebugLibraries>true</UseDebugLibraries>
 | 
				
			||||||
 | 
					    <PlatformToolset>v143</PlatformToolset>
 | 
				
			||||||
 | 
					    <CharacterSet>Unicode</CharacterSet>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
				
			||||||
 | 
					    <ConfigurationType>Application</ConfigurationType>
 | 
				
			||||||
 | 
					    <UseDebugLibraries>false</UseDebugLibraries>
 | 
				
			||||||
 | 
					    <PlatformToolset>v143</PlatformToolset>
 | 
				
			||||||
 | 
					    <WholeProgramOptimization>true</WholeProgramOptimization>
 | 
				
			||||||
 | 
					    <CharacterSet>Unicode</CharacterSet>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
				
			||||||
 | 
					    <ConfigurationType>Application</ConfigurationType>
 | 
				
			||||||
 | 
					    <UseDebugLibraries>true</UseDebugLibraries>
 | 
				
			||||||
 | 
					    <PlatformToolset>v143</PlatformToolset>
 | 
				
			||||||
 | 
					    <CharacterSet>Unicode</CharacterSet>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
				
			||||||
 | 
					    <ConfigurationType>Application</ConfigurationType>
 | 
				
			||||||
 | 
					    <UseDebugLibraries>false</UseDebugLibraries>
 | 
				
			||||||
 | 
					    <PlatformToolset>v143</PlatformToolset>
 | 
				
			||||||
 | 
					    <WholeProgramOptimization>true</WholeProgramOptimization>
 | 
				
			||||||
 | 
					    <CharacterSet>Unicode</CharacterSet>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
				
			||||||
 | 
					  <ImportGroup Label="ExtensionSettings">
 | 
				
			||||||
 | 
					  </ImportGroup>
 | 
				
			||||||
 | 
					  <ImportGroup Label="Shared">
 | 
				
			||||||
 | 
					  </ImportGroup>
 | 
				
			||||||
 | 
					  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
				
			||||||
 | 
					    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
				
			||||||
 | 
					  </ImportGroup>
 | 
				
			||||||
 | 
					  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
				
			||||||
 | 
					    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
				
			||||||
 | 
					  </ImportGroup>
 | 
				
			||||||
 | 
					  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
				
			||||||
 | 
					    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
				
			||||||
 | 
					  </ImportGroup>
 | 
				
			||||||
 | 
					  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
				
			||||||
 | 
					    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
				
			||||||
 | 
					  </ImportGroup>
 | 
				
			||||||
 | 
					  <PropertyGroup Label="UserMacros" />
 | 
				
			||||||
 | 
					  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
				
			||||||
 | 
					    <ClCompile>
 | 
				
			||||||
 | 
					      <WarningLevel>Level3</WarningLevel>
 | 
				
			||||||
 | 
					      <SDLCheck>true</SDLCheck>
 | 
				
			||||||
 | 
					      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
				
			||||||
 | 
					      <ConformanceMode>true</ConformanceMode>
 | 
				
			||||||
 | 
					    </ClCompile>
 | 
				
			||||||
 | 
					    <Link>
 | 
				
			||||||
 | 
					      <SubSystem>Console</SubSystem>
 | 
				
			||||||
 | 
					      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
				
			||||||
 | 
					    </Link>
 | 
				
			||||||
 | 
					  </ItemDefinitionGroup>
 | 
				
			||||||
 | 
					  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
				
			||||||
 | 
					    <ClCompile>
 | 
				
			||||||
 | 
					      <WarningLevel>Level3</WarningLevel>
 | 
				
			||||||
 | 
					      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
				
			||||||
 | 
					      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
				
			||||||
 | 
					      <SDLCheck>true</SDLCheck>
 | 
				
			||||||
 | 
					      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
				
			||||||
 | 
					      <ConformanceMode>true</ConformanceMode>
 | 
				
			||||||
 | 
					    </ClCompile>
 | 
				
			||||||
 | 
					    <Link>
 | 
				
			||||||
 | 
					      <SubSystem>Console</SubSystem>
 | 
				
			||||||
 | 
					      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
				
			||||||
 | 
					      <OptimizeReferences>true</OptimizeReferences>
 | 
				
			||||||
 | 
					      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
				
			||||||
 | 
					    </Link>
 | 
				
			||||||
 | 
					  </ItemDefinitionGroup>
 | 
				
			||||||
 | 
					  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
				
			||||||
 | 
					    <ClCompile>
 | 
				
			||||||
 | 
					      <WarningLevel>Level3</WarningLevel>
 | 
				
			||||||
 | 
					      <SDLCheck>true</SDLCheck>
 | 
				
			||||||
 | 
					      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
				
			||||||
 | 
					      <ConformanceMode>true</ConformanceMode>
 | 
				
			||||||
 | 
					    </ClCompile>
 | 
				
			||||||
 | 
					    <Link>
 | 
				
			||||||
 | 
					      <SubSystem>Console</SubSystem>
 | 
				
			||||||
 | 
					      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
				
			||||||
 | 
					    </Link>
 | 
				
			||||||
 | 
					  </ItemDefinitionGroup>
 | 
				
			||||||
 | 
					  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
				
			||||||
 | 
					    <ClCompile>
 | 
				
			||||||
 | 
					      <WarningLevel>Level3</WarningLevel>
 | 
				
			||||||
 | 
					      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
				
			||||||
 | 
					      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
				
			||||||
 | 
					      <SDLCheck>true</SDLCheck>
 | 
				
			||||||
 | 
					      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
				
			||||||
 | 
					      <ConformanceMode>true</ConformanceMode>
 | 
				
			||||||
 | 
					    </ClCompile>
 | 
				
			||||||
 | 
					    <Link>
 | 
				
			||||||
 | 
					      <SubSystem>Console</SubSystem>
 | 
				
			||||||
 | 
					      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
				
			||||||
 | 
					      <OptimizeReferences>true</OptimizeReferences>
 | 
				
			||||||
 | 
					      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
				
			||||||
 | 
					    </Link>
 | 
				
			||||||
 | 
					  </ItemDefinitionGroup>
 | 
				
			||||||
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <ClCompile Include="源.cpp" />
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
				
			||||||
 | 
					  <ImportGroup Label="ExtensionTargets">
 | 
				
			||||||
 | 
					  </ImportGroup>
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
				
			||||||
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <Filter Include="源文件">
 | 
				
			||||||
 | 
					      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
 | 
				
			||||||
 | 
					      <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
 | 
				
			||||||
 | 
					    </Filter>
 | 
				
			||||||
 | 
					    <Filter Include="头文件">
 | 
				
			||||||
 | 
					      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
 | 
				
			||||||
 | 
					      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
 | 
				
			||||||
 | 
					    </Filter>
 | 
				
			||||||
 | 
					    <Filter Include="资源文件">
 | 
				
			||||||
 | 
					      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
 | 
				
			||||||
 | 
					      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
 | 
				
			||||||
 | 
					    </Filter>
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <ClCompile Include="源.cpp">
 | 
				
			||||||
 | 
					      <Filter>源文件</Filter>
 | 
				
			||||||
 | 
					    </ClCompile>
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
				
			||||||
 | 
					  <PropertyGroup />
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<Project>
 | 
				
			||||||
 | 
					  <ProjectOutputs>
 | 
				
			||||||
 | 
					    <ProjectOutput>
 | 
				
			||||||
 | 
					      <FullPath>D:\vs代码\2023-10-23\x64\Debug\2023-10-23.exe</FullPath>
 | 
				
			||||||
 | 
					    </ProjectOutput>
 | 
				
			||||||
 | 
					  </ProjectOutputs>
 | 
				
			||||||
 | 
					  <ContentFiles />
 | 
				
			||||||
 | 
					  <SatelliteDlls />
 | 
				
			||||||
 | 
					  <NonRecipeFileRefs />
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.37.32822:TargetPlatformVersion=10.0.22621.0:
 | 
				
			||||||
 | 
					Debug|x64|D:\vs代码\2023-10-23\|
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					D:\vs代码\2023-10-23\源.cpp;D:\vs代码\2023-10-23\x64\Debug\源.obj
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					D:\vs代码\2023-10-23\x64\Debug\2023-10-23.exe
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								@ -0,0 +1,247 @@
 | 
				
			|||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <queue>
 | 
				
			||||||
 | 
					#include <unordered_map>
 | 
				
			||||||
 | 
					#include <cmath>
 | 
				
			||||||
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 struct TreeNode {
 | 
				
			||||||
 | 
						int val;
 | 
				
			||||||
 | 
						struct TreeNode *left;	
 | 
				
			||||||
 | 
						struct TreeNode *right;
 | 
				
			||||||
 | 
						TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 class IsBalanced_Solution_Node {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
						 IsBalanced_Solution_Node(int min=INT_MAX,int max=INT_MIN,int high = 0,bool is_balance=true)
 | 
				
			||||||
 | 
						 :_min(min),_max(max),_high(high),_is_balance(is_balance)
 | 
				
			||||||
 | 
						 {}
 | 
				
			||||||
 | 
						 int _min;
 | 
				
			||||||
 | 
						 int _max;
 | 
				
			||||||
 | 
						 int _high;
 | 
				
			||||||
 | 
						 bool _is_balance;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 IsBalanced_Solution_Node my_IsBalanced_Solution(TreeNode* root) {
 | 
				
			||||||
 | 
						 //对于nullptr我们要不要呢
 | 
				
			||||||
 | 
						 if (root == nullptr) {
 | 
				
			||||||
 | 
							 return IsBalanced_Solution_Node();
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 IsBalanced_Solution_Node left = my_IsBalanced_Solution(root->left);
 | 
				
			||||||
 | 
						 IsBalanced_Solution_Node right = my_IsBalanced_Solution(root->right);
 | 
				
			||||||
 | 
						 int min = root->val;
 | 
				
			||||||
 | 
						 int max = root->val;
 | 
				
			||||||
 | 
						 int high = 1;
 | 
				
			||||||
 | 
						 bool is_balance = true;
 | 
				
			||||||
 | 
						 if (left._is_balance == false || right._is_balance == false 
 | 
				
			||||||
 | 
							 || std::abs(left._high - right._high) > 1) {
 | 
				
			||||||
 | 
							 is_balance = false;
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 if (left._high != 0) {
 | 
				
			||||||
 | 
							 min = left._min < min ? left._min : ( min);
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 if (right._high != 0) {
 | 
				
			||||||
 | 
							 max = right._max > max ? right._max : (max);
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 high = std::max(left._high, right._high) + 1;
 | 
				
			||||||
 | 
						 return IsBalanced_Solution_Node(min, max, high, is_balance);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 //	判断是不是平衡二叉树
 | 
				
			||||||
 | 
					 bool IsBalanced_Solution(TreeNode* pRoot) {
 | 
				
			||||||
 | 
						 // write code here
 | 
				
			||||||
 | 
						 if (pRoot == nullptr) {
 | 
				
			||||||
 | 
							 return true;
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 return my_IsBalanced_Solution(pRoot)._is_balance;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 class lowestCommonAncestor_Node {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
						 lowestCommonAncestor_Node(TreeNode*root = nullptr)
 | 
				
			||||||
 | 
							 :node(root){}
 | 
				
			||||||
 | 
						 TreeNode* node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 TreeNode* sum_node = nullptr;
 | 
				
			||||||
 | 
					 lowestCommonAncestor_Node my_lowestCommonAncestor(TreeNode* root, int p, int q) {
 | 
				
			||||||
 | 
						 if (root == nullptr) {
 | 
				
			||||||
 | 
							 return lowestCommonAncestor_Node();
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 lowestCommonAncestor_Node left = my_lowestCommonAncestor(root->left,p,q);
 | 
				
			||||||
 | 
						 lowestCommonAncestor_Node right = my_lowestCommonAncestor(root->right, p, q);
 | 
				
			||||||
 | 
						 //当前的接点有四种可能,
 | 
				
			||||||
 | 
						 //当前的节点是p
 | 
				
			||||||
 | 
						 //当前的节点是q
 | 
				
			||||||
 | 
						 //当前的节点什么都不是,并且是公共的父节点
 | 
				
			||||||
 | 
						 //当前的节点什么也不是
 | 
				
			||||||
 | 
						 TreeNode* re = nullptr;
 | 
				
			||||||
 | 
						 if (left.node == nullptr && right.node == nullptr) {
 | 
				
			||||||
 | 
							 if (root->val == q || root->val == p) {
 | 
				
			||||||
 | 
								 return lowestCommonAncestor_Node(root);
 | 
				
			||||||
 | 
							 }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						 if (left.node != nullptr && right.node != nullptr) {
 | 
				
			||||||
 | 
							 sum_node = root;
 | 
				
			||||||
 | 
							 return lowestCommonAncestor_Node();
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 if (left.node != nullptr) {
 | 
				
			||||||
 | 
							 if (root->val == p && left.node->val == q) {
 | 
				
			||||||
 | 
								 sum_node = root;
 | 
				
			||||||
 | 
								 return lowestCommonAncestor_Node();
 | 
				
			||||||
 | 
							 }
 | 
				
			||||||
 | 
							 if (root->val == q && left.node->val == p) {
 | 
				
			||||||
 | 
								 sum_node = root;
 | 
				
			||||||
 | 
								 return lowestCommonAncestor_Node();
 | 
				
			||||||
 | 
							 }
 | 
				
			||||||
 | 
							 re = left.node;
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 if (right.node != nullptr) {
 | 
				
			||||||
 | 
							 if (root->val == p && right.node->val == q) {
 | 
				
			||||||
 | 
								 sum_node = root;
 | 
				
			||||||
 | 
								 return lowestCommonAncestor_Node();
 | 
				
			||||||
 | 
							 }
 | 
				
			||||||
 | 
							 if (root->val == q && right.node->val == p) {
 | 
				
			||||||
 | 
								 sum_node = root;
 | 
				
			||||||
 | 
								 return lowestCommonAncestor_Node();
 | 
				
			||||||
 | 
							 }
 | 
				
			||||||
 | 
							 re = right.node;
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 return lowestCommonAncestor_Node(re);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 //二叉搜索树的最近公共祖先
 | 
				
			||||||
 | 
					 int aalowestCommonAncestor(TreeNode* root, int p, int q) {
 | 
				
			||||||
 | 
						 // write code here
 | 
				
			||||||
 | 
						 //给定一颗二叉树,和两个节点,返回最近的那个公共的节点
 | 
				
			||||||
 | 
						 //有两种方法可以求出这个答案,一个是直接递归求解出我们所需要的答案,
 | 
				
			||||||
 | 
						 // 另一个就是采用并查集进行求解操作
 | 
				
			||||||
 | 
						 //当我们先采用递归的方式求出公共的节点,再采用并查集的操作解出答案
 | 
				
			||||||
 | 
						 sum_node = nullptr;
 | 
				
			||||||
 | 
						 my_lowestCommonAncestor(root, p, q);
 | 
				
			||||||
 | 
						 return sum_node->val;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 class Union {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
						void put(int father, int child) {
 | 
				
			||||||
 | 
							if (get_father(father) == -1) {
 | 
				
			||||||
 | 
								father_map[father] = father;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (get_father(child) == -1) {
 | 
				
			||||||
 | 
								father_map[child] = child;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							father_map[child] = get_father(father);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						int get_father(int child) {
 | 
				
			||||||
 | 
							if (father_map.count(child) == 0) {
 | 
				
			||||||
 | 
								return -1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							queue<int>qu;
 | 
				
			||||||
 | 
							int father = child;
 | 
				
			||||||
 | 
							qu.push(father);
 | 
				
			||||||
 | 
							while (father != father_map[father]) {
 | 
				
			||||||
 | 
								father = father_map[father];
 | 
				
			||||||
 | 
								qu.push(father);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							while (!qu.empty()) {
 | 
				
			||||||
 | 
								father_map[qu.front()] = father;
 | 
				
			||||||
 | 
								qu.pop();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return father;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						 unordered_map<int, int>father_map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 int re = -1;
 | 
				
			||||||
 | 
					 Union un;
 | 
				
			||||||
 | 
					void my_union_lowestCommonAncestor(TreeNode* root, int p, int q) {
 | 
				
			||||||
 | 
						if (re != -1) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (root != nullptr) {
 | 
				
			||||||
 | 
							//每次只有在递归完左树之后,就进行右树的操作,
 | 
				
			||||||
 | 
							//右树递归完之后就将左右树和当前节点合并
 | 
				
			||||||
 | 
							my_union_lowestCommonAncestor(root->left, q, p);
 | 
				
			||||||
 | 
							if (root->left != nullptr) {
 | 
				
			||||||
 | 
								un.put(root->val, root->left->val);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (root->val == q && un.get_father(p) != -1) {
 | 
				
			||||||
 | 
								re = un.get_father(p);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if(root->val == p && un.get_father(q) != -1) {
 | 
				
			||||||
 | 
								re = un.get_father(q);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							 
 | 
				
			||||||
 | 
							my_union_lowestCommonAncestor(root->right, q, p);
 | 
				
			||||||
 | 
							if (root->right != nullptr) {
 | 
				
			||||||
 | 
								un.put(root->val, root->right->val);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (root->val == q && un.get_father(p) != -1) {
 | 
				
			||||||
 | 
								re = un.get_father(p);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if(root->val == p && un.get_father(q) != -1) {
 | 
				
			||||||
 | 
								re = un.get_father(q);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					 //采用并查集的方式进行操作
 | 
				
			||||||
 | 
					 //二叉搜索树的最近公共祖先
 | 
				
			||||||
 | 
					 int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
 | 
				
			||||||
 | 
						 // write code here
 | 
				
			||||||
 | 
						 my_union_lowestCommonAncestor(root, o1, o2);
 | 
				
			||||||
 | 
						 return re;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 void my_Serialize(TreeNode* root, string& str) {
 | 
				
			||||||
 | 
						 if (root == nullptr) {
 | 
				
			||||||
 | 
							 str.append("#");
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 else {
 | 
				
			||||||
 | 
							 str.append('{'+ to_string(root->val) + '}');
 | 
				
			||||||
 | 
							 my_Serialize(root->left, str);
 | 
				
			||||||
 | 
							 my_Serialize(root->right, str);
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 //序列化二叉树
 | 
				
			||||||
 | 
					 char* Serialize(TreeNode* root) {
 | 
				
			||||||
 | 
						 string str;
 | 
				
			||||||
 | 
						  my_Serialize(root, str);
 | 
				
			||||||
 | 
						 
 | 
				
			||||||
 | 
						 return const_cast<char*>(str.c_str());
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 TreeNode* my_Deserialize(  string& str, int& index) {
 | 
				
			||||||
 | 
						 if (str[index] == '#') {
 | 
				
			||||||
 | 
							 index++;
 | 
				
			||||||
 | 
							 return nullptr;
 | 
				
			||||||
 | 
						 }
 | 
				
			||||||
 | 
						 index = str.find('{', index);
 | 
				
			||||||
 | 
						 index = index + 1;
 | 
				
			||||||
 | 
						 int next_index = str.find('}', index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						 TreeNode* cur = new TreeNode(atoi(str.substr(index, next_index).c_str()));
 | 
				
			||||||
 | 
						 index = next_index + 1;
 | 
				
			||||||
 | 
						 cur->left = my_Deserialize(str, index);
 | 
				
			||||||
 | 
						 cur->right = my_Deserialize(str, index);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 //反序列化二叉树
 | 
				
			||||||
 | 
					 TreeNode* Deserialize(char* str) {
 | 
				
			||||||
 | 
						 int index = 0;
 | 
				
			||||||
 | 
						 string ss(str);
 | 
				
			||||||
 | 
						 return my_Deserialize( ss,index);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
						TreeNode* root = new TreeNode(1);
 | 
				
			||||||
 | 
						root->left = new TreeNode(2);
 | 
				
			||||||
 | 
						root->right = new TreeNode(3);
 | 
				
			||||||
 | 
						 
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue