int helper(TreeNode* root, int res) {
if (root==NULL) {
return 0;
}
int ls = helper(root->left, res);
int rs = helper(root->right, res);
int max_single = max(max(ls, rs) + root->val, root->val);
int max_top = max(max_single, ls+rs+root->val);
res = max(max_single, max_top);
return res;
}
int maxPathSum(TreeNode* root) {
int res=INT_MIN;
int ans = helper(root, res);
return ans;
}
bool isSymmetric(TreeNode* root) {
return isMirror(root, root);
}
bool isMirror(TreeNode* root1, TreeNode* root2) {
if (root1 == NULL && root2 == NULL) {
return true;
}
if (root1 && root2 && root1->val == root2->val) {
return isMirror(root1->left, root2->right) && isMirror(root1->right, root2->left);
}
return false;
}