今天的题目还是和二叉树相关
1.对称二叉树 101. 对称二叉树 - 力扣(LeetCode)
1.1递归法
可以使用递归实现,需要一个辅助函数,判断左和右是否对称,然后主函数里面递归调用这个函数
bool isSymmetric(TreeNode* root) {
if (root == nullptr) {
return true;
}
return isMirror(root->left, root->right);
}
bool isMirror(TreeNode* left, TreeNode* right) {
if (left == nullptr && right == nullptr) {
return true;
}
if (left == nullptr || right == nullptr) {
return false;
}
return (left->val == right->val) &&
isMirror(left->left, right->right) &&
isMirror(left->right, right->left);
}
1.2迭代法
我用一个队列实现比较
bool isSymmetric(TreeNode* root) {
if (root == NULL) return true;
queue<TreeNode*>que;
que.push(root->left);que.push(root->right);
while(!que.empty()){
TreeNode*left=que.front();que.pop();
TreeNode*right=que.front();que.pop();
if(!left&&!right){
continue;
}
if(!left||!right||left->val!=right->val){
return false;
}
que.push(left->left);
que.push(right->right);
que.push(left->right);
que.push(right->left);
}
return true;
}
2.相同的树 100. 相同的树 - 力扣(LeetCode)
两个头结点,我只需要一个一个进行比较就可以了
bool isSameTree(TreeNode* p, TreeNode* q) {
if (p == nullptr && q == nullptr) {
return true;
}
if (p == nullptr || q == nullptr) {
return false;
}
return (p->val == q->val) &&
isSameTree(p->left, q->left) &&
isSameTree(p->right, q->right);
}
3.另一棵树的子树 572. 另一棵树的子树 - 力扣(LeetCode)
我需要一个和相同的数一样的辅助函数,然后依次遍历主树,寻找有没有节点可以满足辅助函数
bool check(TreeNode*p,TreeNode*q){
if(!p&&!q){
return true;
}
if(!p||!q||p->val!=q->val){
return false;
}
return check(p->left,q->left)&&check(p->right,q->right);
}
bool dfs(TreeNode*p,TreeNode*q){
if(!p){
return false;
}
return check(p,q)||dfs(p->left,q)||dfs(p->right,q);
}
bool isSubtree(TreeNode* root, TreeNode* subRoot) {
return dfs(root,subRoot);
}
今天返校没时间了,明天继续!!!