题目描述:
题号:101
给你一个二叉树的根节点 root
, 检查它是否轴对称。
解题思路:
思路一:递归
-
定义递归函数:你首先定义了一个名为
check
的递归函数,该函数用于检查两个二叉树节点是否是镜像对称的。这个函数是整个解题过程的核心。 -
递归基准情况:在
check
函数中,你首先处理了递归的基准情况。如果两个节点都为nullptr
,则表示这两个子树都是空的,因此它们是对称的,返回true
。 -
递归终止条件:接下来,你检查了递归的终止条件。如果其中一个节点是
nullptr
而另一个不是,或者两个节点的值不相等,那么这两个子树不可能是镜像对称的,因此返回false
。
时间复杂度:O(N)
空间复杂度:O(N)
C++
// C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
bool check(TreeNode *left, TreeNode *right) {
if(left == nullptr && right == nullptr) {
return true;
}
if(left == nullptr || right == nullptr || left->val != right->val) {
return false;
}
return check(left->left, right->right) && check(left->right, right->left);
}
public:
bool isSymmetric(TreeNode* root) {
if(root == nullptr) {
return true;
}
return check(root->left, root->right);
}
};
go
// go
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isSymmetric(root *TreeNode) bool {
return check(root, root)
}
func check(left, right *TreeNode) bool {
if left == nil && right == nil {
return true
}
if left == nil || right == nil {
return false
}
return left.Val == right.Val && check(left.Left, right.Right) && check(left.Right, right.Left)
}