【算法题】对称二叉树判断
来源:互联网 发布:网狐6603棋牌源码 编辑:程序博客网 时间:2024/06/05 08:33
解法1:
分层遍历二叉树,判断每一层的节点是否轴对称。
#include <iostream>#include <vector>#include <algorithm>#include <numeric>using namespace std;#define debug_struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};bool isok(vector<TreeNode*>& vec){ int i = 0, j = vec.size() - 1; while (i < j) { if ((vec[i] == NULL&&vec[j] != NULL) || (vec[i] != NULL&&vec[j] == NULL)) { return false; } if (vec[i]==NULL&&vec[j]==NULL)//考虑对称的空节点 { i++; j--; continue; } if (vec[i]->val != vec[j]->val) { return false; } i++; j--; } return true;}bool isSymmetrical(TreeNode* pRoot){ if (pRoot == NULL) { return true; } vector<TreeNode*> vec_old; vector<TreeNode*> vec_new; vec_old.push_back(pRoot); while (!vec_old.empty()) { if (!isok(vec_old)) { return false; } for (auto i = 0; i < vec_old.size(); ++i) { if (vec_old[i] == NULL) { continue; } vec_new.push_back(vec_old[i]->left); vec_new.push_back(vec_old[i]->right); } swap(vec_old, vec_new); vec_new.clear(); } return true;}int p = 0;TreeNode* DeSerialByPre(char* str){ if (str[p] == '#'){ p += 2; return NULL; } TreeNode* node = new TreeNode(str[p]); p += 2; node->left = DeSerialByPre(str); node->right = DeSerialByPre(str); return node;}int main(){ char* str = "8!6!5!#!#!7!#!#!6!7!#!#!5!#!#!"; TreeNode* root; root = DeSerialByPre(str); cout<<isSymmetrical(root);#ifdef debug_#else#endif return 0;}
解法2:前序遍历与对称前序遍历
bool isSymmetrical(TreeNode* pRoot1, TreeNode* pRoot2){ if (pRoot1 == NULL && pRoot2 == NULL) { return true; } if (pRoot1 == NULL || pRoot2 == NULL) { return false; } if (pRoot1->val != pRoot2->val) { return false; } return isSymmetrical(pRoot1->left, pRoot2->right) && isSymmetrical(pRoot1->right, pRoot2->left);}bool isSymmetrical(TreeNode* pRoot){ return isSymmetrical(pRoot, pRoot);}
阅读全文
0 0
- 【算法题】对称二叉树判断
- 【算法】对称二叉树的判断
- 判断对称二叉树
- 判断二叉树是否对称
- 对称二叉树的判断
- 判断二叉树是否对称
- 对称的二叉树判断
- 判断二叉树是否对称
- 判断二叉树是否对称
- 判断二叉树左右对称
- 对称二叉树的判断
- 判断二叉树是否对称
- 判断二叉树是否对称
- 【二叉树】判断二叉树是否对称
- 【leetcode 二叉树对称判断】Symmetric Tree
- 判断是否为对称二叉树
- 判断一个二叉树是否对称
- 判断二叉树是否相同,对称
- 华为笔试题(1)
- linux 常用命令功能介绍
- 斐波那契数列(不使用递归的快速算法)
- 【mysql】mysql分区与分表的区别
- 一文教你迅速解决分布式事务 XA 一致性问题
- 【算法题】对称二叉树判断
- 什么XSS攻击?PHP防止XSS攻击函数
- snake模型求解
- leetcode 40. Combination Sum II DFS深度优先搜索
- top -H -p
- 线程与进程
- codeforces 698A Vacations
- SSH(进阶) SpringDataJPA + SpringMVC 快速搭建企业框架
- centos安装vmvaretools