LeetCode 101. 对称二叉树(Symmetric Tree)
2024-09-05 05:41:22
题目描述
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1
/ \
2 2
\ \
3 3
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
解题思路
本题可用递归和迭代两种做法来求解。
递归做法是每次对于对称的两个节点,首先判断是否都为空,若都为空则返回true;否则判断两节点是否相等,若相等则返回它们对应的子节点的比较结果;否则返回false。
迭代做法是维护一个节点队列,每次取出队列头部两个节点比较其是否相等,若不相等且两节点均不为空,则依次把两个节点对称位置的子节点加入到队列中,注意null也要加入到队列;否则返回false
代码
递归:
/**
* 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) {
if(root == NULL) return true;
return symmetric(root->left, root->right);
}
bool symmetric(TreeNode* left, TreeNode* right){
if(left == right) return true;
else if(left && right && left->val == right->val){
if(symmetric(left->left, right->right) && symmetric(left->right, right->left))
return true;
}
return false;
}
};
迭代:
/**
* 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) {
if(root == NULL) return true;
queue<TreeNode*> q;
q.push(root->left);
q.push(root->right);
while(q.size()){
TreeNode* node1 = q.front();
q.pop();
TreeNode* node2 = q.front();
q.pop();
if(node1 && node2){
if(node1->val != node2->val) return false;
else{
q.push(node1->left);
q.push(node2->right);
q.push(node1->right);
q.push(node2->left);
}
}
else if(node1 || node2) return false;
}
return true;
}
};
最新文章
- iOS UPYUN(又拍云)使用总结
- SAP财务常用数据源概览
- char *a 与char a[] 的区别
- (未解决)android studio:com.android.support:appcompat-v7:22+ Could not found
- Dreamweaver8卡死打开初始化(缓存重建)失败的解决的方法
- Dreamweaver PHP代码护眼配色方案
- Struts2学习第二天——动态方法调用
- 如何选择版本控制系统之二---Git的研发应用场
- Xamarin引用第三方包错误解决方法
- 驰骋工作流引擎 -Webservice接口说明文档
- Getting a handle on
- HslCommunication组件库使用说明 (转载)
- EMQTT本地源码搭建填坑记录
- drozer工具的安装与使用:之一安装篇
- TSPL学习笔记(2):过程和变量绑定
- eclipse maven install没反应解决办法
- VIM学习网址和资料收集
- Centos6.9安装JDK1.8
- Kotlin新语言简介和快速入门知识点
- Oracle常用标准表