每天一道LeetCode-19(对称的树)

14 阅读1分钟

题目描述

给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1:

输入: root = [1,2,2,3,4,4,3]
输出: true

示例 2:

输入: root = [1,2,2,null,3,null,3]
输出: false

分析

  1. 首先确定递归函数的返回类型以及参数

    我们是要对树进行深度优先遍历,需要对同一层对称位置的两个节点进行比较,所以参数是两个TreeNode,返回值自然就是bool类型。

  2. 确定终止条件

    当节点为空时,会出现以下几种情况:

  • 左右节点都为空,return true;
  • 左右节点有且只有一个不为空,return false;
  • 左右节点都不为空,此时需要对左右节点的值进行判断。
  1. 确定单层的递归逻辑

    对终止条件完成后,可以进入到对单层的递归逻辑中,我们需要对当前节点进行上述判断,不过我们传入的节点需要是对称位置的节点。

代码实现

bool isSym(struct TreeNode* left,struct TreeNode* right){
    if(left == NULL && right == NULL) return true;
    else if(left == NULL || right == NULL) return false;
    else if(left->val != right->val) return false;
    else{
        return isSym(left->left,right->right) && isSym(left->right,right->left);
    }
}

bool isSymmetric(struct TreeNode* root){
    return isSym(root->left,root->right);
}