题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ #include <vector> class Solution { public: bool recursion(TreeNode* root1,TreeNode* root2) { if(root1 == nullptr && root2 == nullptr)return true; if(root1 == nullptr || root2 == nullptr || root1->val != root2->val) return false; return recursion(root1->left,root2->right) && recursion(root1->right,root2->left); } void Inorder(TreeNode* tree,vector<int>& val) { if(tree == nullptr) return; Inorder(tree->left,val); val.push_back(tree->val); Inorder(tree->right,val); } bool isSymmetrical(TreeNode* pRoot) { //递归方法 如果对称那么一遍走左一边走右值应该是完全一样的。 return recursion(pRoot,pRoot); //采用中序遍历结果对称来做,是错误的,没有办法去判断树型,除非你确定他是满二叉树 没意义 // vector<int > val; // Inorder(pRoot,val); // int beg = 0; // int rbeg = val.size()-1; // while(beg < rbeg) // { // if(val[beg++]!=val[rbeg--]) return false; // } // return true; } };