leetcode & 剑指 Offer 26. 树的子结构
Posted Z-Pilgrim
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode & 剑指 Offer 26. 树的子结构相关的知识,希望对你有一定的参考价值。
两种写法
1、一个Dfs
check的作用是: 比如B节点是1 2 不用check的话 可能只要A包含了1和2节点,哪怕不是连着的,也会返回true
class Solution
public:
bool isSubStructure(TreeNode* A, TreeNode* B)
if( A && !B) return false;
return sub(A, B, 0);
bool sub(TreeNode* A, TreeNode* B, int check)
if(!B) return true;
if(!A) return false;
if (A->val == B->val)
if(check) return (sub(A->left, B->left, 1) && sub(A->right, B->right, 1));
else
return (sub(A->left, B->left,1) && sub(A->right, B->right,1)) || (
sub(A->left, B,0) || sub(A->right, B,0)
) ;
else
if(check) return false;
return sub(A->left, B, 0) || sub(A->right, B, 0);
;
2、两个dfs
class Solution
public:
bool isSubStructure(TreeNode* A, TreeNode* B)
if( A && !B) return false;
return sub(A, B, 0);
bool sub(TreeNode* A, TreeNode* B, int check)
if(!B) return true;
if(!A) return false;
if (A->val == B->val)
if(check) return (sub(A->left, B->left, 1) && sub(A->right, B->right, 1));
else
return (sub(A->left, B->left,1) && sub(A->right, B->right,1)) || (
sub(A->left, B,0) || sub(A->right, B,0)
) ;
else
if(check) return false;
return sub(A->left, B, 0) || sub(A->right, B, 0);
以上是关于leetcode & 剑指 Offer 26. 树的子结构的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer(第 2 版)完整题解笔记 & C++代码实现(LeetCode版)
LeetCode剑指 Offer 64. 求1+2+…+n(C++)