解题方案
思路
递归结束条件:
- 都为空指针则返回
true
- 只有一个为空则返回
false
递归过程:
- 判断两个指针当前节点值是否相等
- 判断 A 的右子树与 B 的左子树是否对称
- 判断 A 的左子树与 B 的右子树是否对称
-
短路:
在递归判断过程中存在短路现象,也就是做
与
操作时,如果前面的值返回false
则后面的不再进行计算时间复杂度:O(n)
-
class Solution { private: bool isMirror(TreeNode* t1,TreeNode* t2) { if(t1==NULL && t2==NULL) return true; if((t1==NULL && t2)|| (t2==NULL && t1)) return false; return (t1->val==t2->val)&&isMirror(t1->right,t2->left)&&isMirror(t1->left,t2->right); } public: bool isSymmetric(TreeNode* root) { if(root==NULL) return true; return isMirror(root->left,root->right); } };
方法二:迭代