剑指 Offer第 7 天 搜索与回溯算法(简单)
剑指 Offer 26. 树的子结构
题目思路
不断进行遍历A树,当A树中的点和B树的根节点一致时就进行判断是不是子结构。注意在判断函数中如果B树先遍历完则为真,反之A先遍历完为假
代码
class Solution {
public:
bool pan(TreeNode* A, TreeNode* B){
if(!B)return true;
if(!A)return false;
//cout<<A->val<<" "<<B->val<<endl;
if(A->val==B->val){
return pan(A->left,B->left)&&pan(A->right,B->right);
}else{
return false;
}
}
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(!B||!A)return false;
if((A->val==B->val)&&pan(A->left,B->left)&&pan(A->right,B->right)){
//cout<<A->val<<endl;
return true;
}else{
//cout<<A->left->val<<endl;
return isSubStructure(A->left,B)||isSubStructure(A->right,B);
}
}
};
剑指 Offer 27. 二叉树的镜像
题目思路
把左子树和右子树交换即可,通过递归来做
代码
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(!root)return NULL;
TreeNode* l = mirrorTree(root->left);
TreeNode* r = mirrorTree(root->right);
root->left = r;
root->right = l;
return root;
}
};
剑指 Offer 28. 对称的二叉树
题目思路
和上一题差不多,不过多一个判断函数,判断两个树结构是否是对称的。注意两颗树结构一致,应把A->left和B->right对比、把A->right和B->left对比
代码
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return pan(root->left,root->right);
}
private:
bool pan(TreeNode* A,TreeNode* B){
if(!A&&!B){
return true;
}
if(!A||!B||A->val!=B->val){
return false;
}
return pan(A->left,B->right)&&pan(A->right,B->left);
}
};
这篇文章如果对小伙伴们有帮助的话,希望点个赞支持一下~ 十分感谢~