题目描述
请实现一个函数,用来判断一棵二叉树是不是对称的。
如果一棵二叉树和它的镜像一样,那么它是对称的。
样例
Input:
1
/ \
2 2
/ \ / \
3 4 4 3
Output: true
解题思路
-
普通思路
-
描述
假定例子中两个2节点记为A,B,要满足对称二叉树,A的左子树需和B的右子树相等,A的右子树需和B的左子树相等。
-
实现代码:
/* struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int val) { this->val = val; this->left = this->right = NULL; } }; */ bool isSymmetric(TreeNode* root) { if(!root) { return true; } return dfs(root->left,root->right); } bool dfs(TreeNode* left,TreeNode* right) { if(!left || !right) { return !left && !right; //两者其中一个为空,返回false,均为空返回true } if(left->val != right->val) // 节点值不等,返回false { return false; } // 递归判断左右子树 return dfs(left->left,right->right) && dfs(left->right,right->left); }
-