思路: 这题脑子画个图想想就可以明白了。每个结点都会触发两个新的递归,只要任意一个子递归里返回false,最终结果均为false。
#include<iostream> using namespace std; //画个图想想就明白了 struct TreeNode { int value; TreeNode*left; TreeNode*right; TreeNode(int x = 0) :value(x), left(NULL), right(NULL) {} }; class Solution { public: bool IsSymmetrical(TreeNode*proot) { if (proot == NULL) return true; return IsSymmetricalCore(proot, proot); } private: bool IsSymmetricalCore(TreeNode*proot1, TreeNode*proot2) { if (proot1 == NULL&&proot2 == NULL) return true; if (proot1 == NULL || proot2 == NULL) return false; if (proot1->value != proot2->value) return false; //以上三个都是递归结束的条件 //接下来开始递归 return IsSymmetricalCore(proot1->left, proot2->right) && IsSymmetricalCore(proot1->right, proot2->left);//核心 } };