初级算法-树-对称二叉树

作者: coenen | 来源:发表于2021-09-02 07:34 被阅读0次
给定一个二叉树,检查它是否是镜像对称的。
进阶:

你可以运用递归和迭代两种方法解决这个问题吗?

摘一个示例做个说明.
示例 1:
二叉树 [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
条件分析:
  1. 二叉树 -> 递归
  2. 堆成 -> 同级left ,right 相同,不同级的中心对称
解决思路1:
  1. 根据分析1,采用递归操作实现
  2. 根据分析2,先判断树是否存在.然后递归操作
先判断树是否存在.然后递归操作.不存在,则返回true.存在,然后判断左右是否相等.采用函数递归方式.先判断是否存在左右节点.都不存在则返回true,一个存在则返回false.都存在则判断左右节点值是否相同,不同则返回false.然后再递归左树的左节点和右树的右节点(对称位置)及左树的右节点和右树的左节点.
func isSymmetric(_ root: TreeNode?) -> Bool {
 
    guard let tree = root else {
        return true
    }

    return isSymmetric(tree.left, tree.right)
}

func isSymmetric(_ left: TreeNode?, _ right: TreeNode?) -> Bool {
    // 左右节点是否存在,都不存在则返回true
    if left == nil && right == nil {
        return true
    }
    // 如果其中一个节点不存则返回false,或者节点值不相等
    guard let leftTree = left , let rightTree = right, leftTree.val != rightTree.val else {
        return false
    }
    // 返回左右节点的字节点是否对称相应节点
    return isSymmetric(leftTree.left, rightTree.right) && isSymmetric(leftTree.right, rightTree.left)
}

测试用例:

let root = TreeNode()
root.val = 1
let firLeft = TreeNode()
firLeft.val = 2
let firRight = TreeNode()
firRight.val = 2
let secFirLeftLeft = TreeNode()
secFirLeftLeft.val = 3
let secFirLeftRight = TreeNode()
secFirLeftRight.val = 4
let secFirRightLeft = TreeNode()
secFirRightLeft.val = 4
let secFirRightRight = TreeNode()
secFirRightRight.val = 3
root.left = firLeft
root.right = firRight
firLeft.left = secFirLeftLeft
firLeft.right = secFirLeftRight
firRight.left = secFirRightLeft
firRight.right = secFirRightRight

考察要点:

  • 深度搜索优先
  • 广度搜索优先
  • 二叉树

相关文章

  • 每日Leetcode—算法(10)

    100.相同的树 算法: 101.对称二叉树 算法: 104.二叉树的最大深度 算法: 107.二叉树的层次遍历 ...

  • 初级算法-树-对称二叉树

    给定一个二叉树,检查它是否是镜像对称的。 进阶: 你可以运用递归和迭代两种方法解决这个问题吗? 条件分析: 二叉树...

  • 二叉树--自对称判断

    今天学习的算法是判断二叉树是否自对称。 题目介绍 对称二叉树的特点是将跟节点的左右子树翻转后,树与原来保持完全一致...

  • 【LeetCode】101-对称二叉树

    对称二叉树 题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的...

  • LeetCode-101-对称二叉树

    LeetCode-101-对称二叉树 101. 对称二叉树[https://leetcode-cn.com/pro...

  • 2019-04-09 BFS广度优先搜索刷题Day1

    Leetcode 101 对称二叉树 题目描述: 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2...

  • 剑指offer | 对称二叉树

    对称二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的如果一棵二叉树和它的镜像一样,那么它是对称的 分析:根据...

  • 面试题28. 对称的二叉树

    对称的二叉树 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称...

  • JZ-058-对称的二叉树

    对称的二叉树 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样...

  • 第九天的leetcode刷题

    今天的题目是判断是否为对称二叉树:101. 对称二叉树[https://leetcode-cn.com/probl...

网友评论

    本文标题:初级算法-树-对称二叉树

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