【剑指offer】对称的二叉树
对称的二叉树
http://www.nowcoder.com/questionTerminal/ff05d44dfdb04e1d83bdbdab320efbcb
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: /*递归写法很简单,重写一个递归函数即可 bool isSym(TreeNode* pRoot1, TreeNode* pRoot2){ if(!pRoot1 && !pRoot2) return true; if(!pRoot1 || !pRoot2) return false; if(pRoot1->val != pRoot2->val) return false; return isSym(pRoot1->left, pRoot2->right) && isSym(pRoot1->right, pRoot2->left); } bool isSymmetrical(TreeNode* pRoot) { return isSym(pRoot, pRoot); } */ //非递归写法DFS需要用到辅助栈,把每一对相同的点都成对加入到栈里 //辅助空间利用栈和队列都可以,一个是DFS,一个是BFS bool isSymmetrical(TreeNode* pRoot) { stack<TreeNode* > Stack; if(!pRoot) return true; Stack.push(pRoot->left); Stack.push(pRoot->right); while(!Stack.empty()){ TreeNode* right = Stack.top(); Stack.pop(); TreeNode* left = Stack.top(); Stack.pop(); if(left == nullptr && right == nullptr) continue; if(left == nullptr || right == nullptr) return false; if(left->val != right->val) return false; Stack.push(left->right); Stack.push(right->left); Stack.push(left->left); Stack.push(right->right); } return true; } };