博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
101. 对称二叉树
阅读量:5275 次
发布时间:2019-06-14

本文共 901 字,大约阅读时间需要 3 分钟。

题目描述

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

1   / \  2   2 / \ / \3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

1   / \  2   2   \   \   3    3

说明:

如果你可以运用递归和迭代两种方法解决这个问题,会很加分。

分析

(递归) O(n)

递归判断两个子树是否互为镜像。

两个子树互为镜像当且仅当:

  1. 两个子树的根节点值相等;
  2. 第一棵子树的左子树和第二棵子树的右子树互为镜像,且第一棵子树的右子树和第二棵子树的左子树互为镜像;

时间复杂度分析:从上到下每个节点仅被遍历一遍,所以时间复杂度是 O(n)。

贴出代码

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public boolean isSymmetric(TreeNode root) {        return root == null || dfs(root.left,root.right);    }    private boolean dfs(TreeNode p, TreeNode q){        if (p == null || q == null){            return p == null && q == null;        }        return p.val == q.val && dfs(p.left,q.right) && dfs(p.right,q.left);    }}

转载于:https://www.cnblogs.com/Tu9oh0st/p/10892186.html

你可能感兴趣的文章