leetcode101-对称二叉树(这题并不简单,但leetcode标记为了简单题)
101. 对称二叉树
首先是自己写的BFS
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { if(root->left==nullptr&&root->right==nullptr) return true; queue<TreeNode*> qqq; qqq.push(root); while(!qqq.empty()) { int size=qqq.size(); vector<int> nums; for(int i=0;i<size;i++) { TreeNode *t=qqq.front(); qqq.pop(); if(t==nullptr) { nums.push_back(-500); //往数组中添加-500是为了辨别不存在的节点和其他节点 continue; } nums.push_back(t->val); qqq.push(t->left); qqq.push(t->right); } int size2=nums.size(); for(int i=0;i<size2/2;i++) { if(nums[i]!=nums[size2-1-i]) return false; //如果出现不对称的会直接在这里退出,不会死循环 } } return true; } };
DFS没有想到另外创建一个函数,递归调用原函数没通过。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool dfs(TreeNode* leftNode,TreeNode* rightNode) { if(leftNode==nullptr&&rightNode==nullptr) return true; if(leftNode&&rightNode==nullptr) return false; if(rightNode&&leftNode==nullptr) return false; if(leftNode->val!=rightNode->val) return false; return dfs(leftNode->left,rightNode->right)&&dfs(leftNode->right,rightNode->left); } bool isSymmetric(TreeNode* root) { return dfs(root->left,root->right); } };