题解 | #对称的二叉树#
对称的二叉树
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) { } }; */ class Solution { public: bool isSymmetrical(TreeNode* pRoot) { //实际上是判断左右子树是否可以相互翻转, //同时进行遍历左右子树,并判断对应结点是否相等 if(pRoot==nullptr) return true; else return reversable(pRoot->left,pRoot->right); } bool reversable(TreeNode* leftNode,TreeNode* rightNode) { //递归出口 if((leftNode==nullptr&&rightNode!=nullptr)||(leftNode!=nullptr&&rightNode==nullptr))//如果发现有这2种情况提前退出递归不用再向下 return false; if(leftNode==nullptr&&rightNode==nullptr)//递归到底,按照定义应该返回true return true; if(leftNode->val!=rightNode->val)//这个情况也不必向下,写在这里是为了防止取空指针的值 return false; //递归判断对称结点是否相等 bool leftEqulity=reversable(leftNode->right, rightNode->left); bool rightEqulity=reversable(leftNode->left,rightNode->right); //返回结果 return leftEqulity==0?leftEqulity:rightEqulity; } };
对于根结点的单个子树来说实际上是后序遍历