Symmetric Tree ,bfs
来源:互联网 发布:ubuntu命令行修改文件 编辑:程序博客网 时间:2024/05/18 00:15
标签说是dfs的,不过我就用层次遍历写了。。
class Solution {
public:bool isLevelSym(vector<TreeNode*> arr){
if(arr.empty()||arr.size()==1)
return true;
if(arr.size()%2==1)
return false;
bool res=true;
for(unsigned i=0,j=arr.size()-1;i<j;i++,j--){
if(arr[i]==NULL&&arr[j]==NULL)
continue;
else if(arr[i]==NULL||arr[j]==NULL||arr[i]->val!=arr[j]->val){
res=false;
break;
}
}
return res;
}
bool isSymmetric(TreeNode *root) {
if(root==NULL)
return true;
bool res=true;
int curCnt=0,nextCnt=1;
queue<TreeNode*> queue;
vector<TreeNode*> arr;
queue.push(root);
while(!queue.empty()){
curCnt=nextCnt;
nextCnt=0;
while(curCnt>0){
TreeNode* t=queue.front();
queue.pop();
curCnt--;
arr.push_back(t);
if(t){
queue.push(t->left);
queue.push(t->right);
nextCnt+=2;
}
}
if(!isLevelSym(arr)){
res=false;
break;
}
arr.clear();
}
return res;
}
};
看别人的,递归解法
class Solution {
public:
bool solve(TreeNode* leftNode,TreeNode* rightNode){
if(leftNode==NULL&&rightNode==NULL)
return true;
if(leftNode==NULL||rightNode==NULL)
return false;
return leftNode->val==rightNode->val&&solve(leftNode->left,rightNode->right)&&solve(leftNode->right,rightNode->left);
}
bool isSymmetric(TreeNode *root) {
if(root==NULL)
return true;
return solve(root->left,root->right);
}
};
0 0
- Symmetric Tree ,bfs
- [BFS]101. Symmetric Tree
- 101. Symmetric Tree--DFS(递归)/BFS(queue+迭代)
- LeetCode——101. Symmetric Tree (bfs)
- leetcode 101. Symmetric Tree BFS广度优先遍历
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- Symmetric Tree
- 自定义Adapter中getView( )中使用View.setTag()和不使用的区别。
- mint sogou
- ctags常用命令 -- linux
- 【No11.】仿IOS界面最常用的回弹效果
- mtk android代码如何修改mbr地址
- Symmetric Tree ,bfs
- 程序员如何写出杀手级的简历
- 【转】遭遇php的in_array低性能
- android 横竖屏的相关设置
- EOF、EOT 简单介绍
- 黑马程序员 Java学习总结之JDK1.5并发库
- 枚举 数组中查找某个值
- SQL优化34条建议
- 创建hash表解决实际问题