orz,没有思路,有了思路还是错的
递归:
可以仿照归并排序,我这么觉得 两边判断,如果不是当我没说
递归停止的条件是什么? 结束条件
左节点和右节点都为空 -> 倒底了都长得一样 ->true
左节点为空的时候右节点不为空,或反之 -> 长得不一样-> false
左右节点值不相等 -> 长得不一样 -> false
要想两棵树镜像对称,那么A树左边要和B树右边镜像,A树右边要和B树左边镜像我们才能说这两棵树是镜像的 递归条件
调用递归函数传入左左和右右
调用递归函数传入左右和右左
调用递归函数,我们想知道它的左右孩子是否镜像,传入的值是root的左孩子和右孩子。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { if(root == NULL) return true; else return double_isSymmetric(root->left,root->right); } bool double_isSymmetric(TreeNode* left_,TreeNode* right_){ if(left_ == NULL && right_ == NULL) { return true; } if(left_ == NULL || right_ == NULL) //her 写错了 不能写它不等于空或者它不等于空 { return false; } if(left_->val != right_->val) { return false; } return double_isSymmetric(left_->left,right_->right) && double_isSymmetric(left_->right,right_->left); } // queue <TreeNode*> q; // // TreeNode *p = new TreeNode(); // q.push(root); // while(!q.empty()) // { // int m = q.size(); // vector<int> v; // while(m--) // { // if(q.front()->left!=NULL) // { // q.push(q.front()->left); // } // if(q.front()->right!=NULL) // { // q.push(q.front()->right); // } // if(q.) // v.push_back(q.front()->val); // q.pop(); // } // for(int i = 0;i < v.size()/2;i++) // { // if(v[i] != v[v.size()-i-1]) // { // return false; // } // } // } // return true; // } };