刷题计划(第6天)
时间:2022.4.22
题数:3
题目类型:搜索与回溯算法
1. #### 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
这个也算考研的高频题了
class Solution {
public:
TreeNode* swap(TreeNode* root){
if(root==NULL) return NULL;
if(root->right==NULL&&root->left==NULL) return root;
swap(root->left);
swap(root->right);
TreeNode* temp=root->right;
root->right=root->left;
root->left=temp;
return root;
}
TreeNode* mirrorTree(TreeNode* root) {
return swap(root);
}
};
这里时间100%就没管了
2. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
这题和上题有点区别,
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return twotree(root,root);
}
bool twotree(TreeNode* a,TreeNode* b){
if (!a && !b) return true;
if (!a || !b) return false;
return a->val==b->val&&twotree(a->right,b->left)&&twotree(a->left,b->right);
}
};
。
3. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(A==NULL||B==NULL) return false;
return twoTree(A,B)||isSubStructure(A->left,B)||isSubStructure(A->right,B);
}
bool twoTree(TreeNode* a,TreeNode* b){
if(b==NULL) return true;
if(a==NULL) return false;
return a->val==b->val && twoTree(a->right,b->right) && twoTree(a->left,b->left);
}
};
总结
树的bfs,同时利用递归来进行解题