剑指 Offer 28. 对称的二叉树
对称二叉树定义:对于树中任意两个对称节点L和R,一定有:
- L.val == R.val:这两个对称节点值相等
- L.left.val == R.right.val:即L的左子节点和R的右子节点对称;
- L.right.val == R.left.val:即L的右子节点和R的左子节点对称
接下来递归处理:
特例:若根节点root为空,则直接返回true
返回值:即 recur(root.left, root.right)
/**
* 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 recur(TreeNode* L,TreeNode* R){
if(L==nullptr&&R==nullptr) return true;
if(L==nullptr||R==nullptr||L->val!=R->val) return false; //确定终止条件
bool res = recur(L->left,R->right)&&recur(L->right,R->left);
return res;
}
bool isSymmetric(TreeNode* root) {
if(root==nullptr) return true;
return recur(root->left,root->right);
}
};