递归法css
/** * 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; if( isMirror(root->left, root->right)) return true; else return false; } bool isMirror(TreeNode* lc, TreeNode* rc) { if(lc == NULL && rc == NULL) return true; if(lc == NULL || rc == NULL) return false; else { if (lc->val == rc->val) return (isMirror(lc->left, rc->right) && isMirror(lc->right, rc->left)); else return false; } } };
时间复杂度:html
O(n),由于算法过程要遍历树的每个节点,节点数量为n。node
空间复杂度:算法
O(n),递归函数使用的栈空间与树的层数有关。若是树为线性结构,其层数为n,因此空间复杂度为O(n)函数
迭代法spa
class Solution { public: bool isSymmetric(TreeNode* root) { if(root == NULL) return true; queue< TreeNode* > q1; queue< TreeNode* > q2; q1.push(root->left); q2.push(root->right); while(q1.size()>0 && q2.size()>0) { TreeNode* n1 = q1.front(); TreeNode* n2 = q2.front(); q1.pop(); q2.pop(); if(n1 == NULL && n2 == NULL) continue; if(n1 == NULL || n2 == NULL) return false; if(n1->val == n2->val) { q1.push(n1->left); q2.push(n2->right); q1.push(n1->right); q2.push(n2->left); } else return false; } return true; } };
时间复杂度:code
O(n) 要遍历每个节点;htm
空间复杂度:blog
搜索队列须要额外的空间。在最糟糕状况下,咱们不得不向队列中插入 O(n)个结点(???)。所以,空间复杂度为 O(n)。
递归