对称的二叉树

题目

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的

思路

在已学习的二叉树遍历中,都是先遍历左子树,最后遍历右子树,我们可以定义一种算法,先遍历父节点,再遍历左子树,最后遍历右子树,称这种算法为对称遍历算法

  • 如果前序遍历与对称遍历得到的序列相同,则二叉树为对称的(可以自行检测)
  • 考虑到某些结点只有左子树或右子树,则遍历时需要把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);
    }
};

 

posted on 2018-12-26 17:57  tianzeng  阅读(148)  评论(0编辑  收藏  举报

导航