美文网首页Leetcode
Leetcode.101.Symmetric Tree

Leetcode.101.Symmetric Tree

作者: Jimmy木 | 来源:发表于2019-10-24 19:33 被阅读0次

题目

给定一个二叉树, 判断这个二叉树是否对称.

Input: [1,2,2,3,4,4,3]
           1
          / \
         2   2
        / \ / \ 
       3  4 4  3
Output: true
Input: [1,2,2,null,3,null,3]
           1
          / \
         2   2
          \   \ 
           3   3
Output: false

思路

判断这个数是否对称: 将根节点的右边子树所有左右节点都交换位置就和根节点树一样.

因此可以递归, 将左树的左节点和右树的右节点比较, 左树的右节点和右树的左节点比较.

bool isTreeNodeEqual(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;
    }

    if (isTreeNodeEqual(left->left, right->right) &&
        isTreeNodeEqual(left->right, right->left)) {
        return true;
    }

    return false;
}

// 将right树的left和right交换后和left相等
bool isSymmetric(TreeNode* root) {
    if(root == nullptr) return true;
    TreeNode *leftTree = root->left;
    TreeNode *rightTree = root->right;

    return isTreeNodeEqual(leftTree, rightTree);
}

总结

熟练运用递归, 考虑递归时的返回值使用.

相关文章

网友评论

    本文标题:Leetcode.101.Symmetric Tree

    本文链接:https://www.haomeiwen.com/subject/xjwdvctx.html