对称的二叉树
题目
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的
思路
在已学习的二叉树遍历中,都是先遍历左子树,最后遍历右子树,我们可以定义一种算法,先遍历父节点,再遍历左子树,最后遍历右子树,称这种算法为对称遍历算法
- 如果前序遍历与对称遍历得到的序列相同,则二叉树为对称的(可以自行检测)
- 考虑到某些结点只有左子树或右子树,则遍历时需要把nullptr考虑进去
/** * 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 { private: bool isSymmetricCore(TreeNode *left, TreeNode *right) { if (left == nullptr && right == nullptr) { return true; } if (left == nullptr || right == nullptr) { return false; } if (left->val != right->val) { return false; } return isSymmetricCore(left->left, right->right) && isSymmetricCore(left->right, right->left); } public: bool isSymmetric(TreeNode* root) { if (root == nullptr) { return true; } return isSymmetricCore(root->left, root->right); } };