[LeetCode] Symmetric Tree
2014-12-14 00:00
399 查看
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
But the following is not:
Note:
Bonus points if you could solve it both recursively and iteratively.
confused what
Hide Tags
Tree Depth-first Search
这个嘛,用两个队列,一个维护树从左到右,一个维护树的从右到左。这就好了。写了两个,一个识queue 中是已经已经符合的,弹出后判断其子节点是否符合,这样queue 中不维护NULL。
View Code
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
confused what
"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.
Hide Tags
Tree Depth-first Search
这个嘛,用两个队列,一个维护树从左到右,一个维护树的从右到左。这就好了。写了两个,一个识queue 中是已经已经符合的,弹出后判断其子节点是否符合,这样queue 中不维护NULL。
#include <iostream> #include <queue> using namespace std; /** * Definition for binary tree */ 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||(root->left==NULL&&root->right==NULL)) return true; if(root->left==NULL||root->right==NULL||root->left->val!=root->right->val) return false; queue<TreeNode*> lft; lft.push(root->left); queue<TreeNode*> rgt; rgt.push(root->right); while(( !lft.empty() )||( !rgt.empty() )){ int nlft=lft.size(),nrgt=rgt.size(); if(nlft!=nrgt) return false; for(int i=0;i<nlft;i++){ TreeNode* curlft=lft.front(),*currgt=rgt.front(); if( (curlft->left==NULL&&currgt->right!=NULL) || (curlft->right==NULL&&currgt->left!=NULL) ) return false; if(curlft->left!=NULL&& currgt->right!=NULL&& curlft->left->val!=currgt->right->val) return false; if(curlft->right!=NULL&& currgt->left!=NULL&& curlft->right->val!=currgt->left->val) return false; if(curlft->left!=NULL) lft.push(curlft->left); if(curlft->right!=NULL) lft.push(curlft->right); if(currgt->right!=NULL) rgt.push(currgt->right); if(currgt->left!=NULL) rgt.push(currgt->left); lft.pop(); rgt.pop(); } } return true; } }; */ class Solution { public: bool isSymmetric(TreeNode *root) { if(root==NULL) return true; queue<TreeNode* > lft,rgt; lft.push(root->left); rgt.push(root->right); while((!lft.empty())||(!rgt.empty())){ TreeNode * curlft=lft.front(),*currgt=rgt.front(); lft.pop(); rgt.pop(); if(curlft==NULL&&currgt==NULL) continue; if(curlft==NULL||currgt==NULL||curlft->val!=currgt->val) return false; lft.push(curlft->left); lft.push(curlft->right); rgt.push(currgt->right); rgt.push(currgt->left); } return true; } }; int main() { return 0; }
View Code
相关文章推荐
- [leetcode] 101. Symmetric Tree
- Leetcode-Symmetric Tree
- leetcode-Symmetric Tree 对称树
- [LeetCode] Symmetric Tree
- [LeetCode] Symmetric Tree
- [LeetCode]Symmetric Tree
- leetcode--Symmetric Tree
- [LeetCode] Symmetric Tree 判断二叉树是否为对称二叉树
- leetcode-Symmetric Tree
- Leetcode#101. Symmetric Tree(对称树)
- LeetCode 101 Symmetric Tree
- leetcode——Symmetric Tree
- LeetCode101. Symmetric Tree
- leetcode [Symmetric Tree]
- Leetcode 101. Symmetric Tree 判断二叉树是否对称,注意写在两个方法中,递归时注意空的判断
- 【LeetCode】Symmetric Tree
- [LeetCode][二叉树]Symmetric Tree
- leetcode 日经贴,python code -Symmetric Tree
- Symmetric Tree - Leetcode
- Java for LeetCode 101 Symmetric Tree