/** * 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: void digui(TreeNode* root_a,TreeNode* root_b,bool &result){ if(root_a==NULL&&root_b==NULL)//先看看是否都是NULL return; if((root_a==NULL&&root_b!=NULL)|| (root_a!=NULL&&root_b==NULL)|| (root_a->val!=root_b->val))//如果两边只有一边是NULL或者两边值不等,就返回不行 { result=false; return; } digui(root_a->left,root_b->right,result); if(!result)//我想早点返回 return; digui(root_a->right,root_b->left,result); } bool diedai(TreeNode* root) { queue<TreeNode*> temp;//使用队列结构 temp.push(root); temp.push(root); bool result=true; while(!(temp.empty())&&result)//停止条件:队列为空或有不满足条件的时候 { TreeNode* node_a=temp.front();//提取头两个节点 temp.pop(); TreeNode* node_b=temp.front(); temp.pop(); if(node_a==NULL&&node_b==NULL)//检查两个节点是否同时为NULL continue; else if(node_a==NULL||node_b==NULL) { result=false; continue; } else if(node_a->val!=node_b->val)//检查两个节点值是否相等 result=false; temp.push(node_a->left);//然后吧左右孩子分别对应压入队列 temp.push(node_b->right); temp.push(node_a->right); temp.push(node_b->left); } return result; } bool isSymmetric(TreeNode* root) { //diedai return diedai(root); //digui bool result=true; digui(root,root,result); return result; } };
分析:
还是得动脑子、