LeetCode 101. Symmetric Tree
2017-04-23 15:34
525 查看
递归方法
非递归方法
非递归的思路是层序遍历二叉树,判断每层的节点是否构成回文。
class Solution { public: bool isSymmetric(TreeNode* root) { if(root==NULL)return true; return help(root->left,root->right); } bool help(TreeNode* left, TreeNode* right){ if(left==NULL&&right==NULL)return true; if(left&&right){ if(left->val!=right->val)return false; if(!help(left->left,right->right))return false; if(!help(left->right,right->left))return false; return true; } else return false; } };
非递归方法
非递归的思路是层序遍历二叉树,判断每层的节点是否构成回文。
class Solution { public: bool isSymmetric(TreeNode* root) { if(root==NULL) return true; vector<TreeNode*> vec; //用数组模拟队列 vec.push_back(root); int i=0; //i标记队列的起始位置 int tail=0; vector<TreeNode*> temp; //保存层序遍历一层的节点 while(i<vec.size()){ temp.push_back(vec[i]); if(vec[i]){ vec.push_back(vec[i]->left); vec.push_back(vec[i]->right); } if(i==tail){ if(!isPlalindrome(temp))return false; temp.clear(); tail=vec.size()-1; } i++; } return true; } bool isPlalindrome(vector<TreeNode*>& vec){ int i=0,j=vec.size()-1; while(i<j){ if(vec[i]&&vec[j]){ if(vec[i]->val!=vec[j]->val)return false; } else if(vec[i]==NULL&&vec[j]==NULL); else return false; i++;j--; } return true; } };
相关文章推荐
- leetcode || 101、Symmetric Tree
- leetcode-101 Symmetric Tree
- leetcode 101 Symmetric Tree
- Java [Leetcode 101]Symmetric Tree
- LeetCode 101 Symmetric Tree(对称树)(*)
- [leetcode:python]101. Symmetric Tree
- leetcode101~Symmetric Tree
- LeetCode 101 Symmetric Tree
- LeetCode 101. Symmetric Tree(对称的树)
- leetcode 101:Symmetric Tree
- leetcode 101: Symmetric Tree
- leetcode 101. Symmetric Tree
- Leetcode 101. Symmetric Tree 判断二叉树是否对称,注意写在两个方法中,递归时注意空的判断
- LeetCode - 101 - Symmetric Tree
- leetcode-101-Symmetric Tree
- [leetcode 101]Symmetric Tree
- 【LeetCode-面试算法经典-Java实现】【101-Symmetric Tree(对称树)】
- leetcode101——Symmetric Tree
- leetcode 101 Symmetric Tree
- Leetcode 101 Symmetric Tree