算法—leetcode—101

91 阅读1分钟

题目

101 对称二叉树

题目描述

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

思路

1.根节点为nil则是对称二叉树
2.否则校验左子数和右子数是否相等
3.如果左子数和右子数相等,则校验左子数的左子数和右子数的右子数是否相等 && 左子数的右子数与右子数的左子数是否相等
4.对2.3两步骤进行递归校验

示例

data := &TreeNode{
	Val:1,
	Left:&TreeNode{
		Val:2,
		Left:&TreeNode{Val:3},
		Right:&TreeNode{Val:4},
	},
	Right:&TreeNode{
		Val:2,
		Left:&TreeNode{Val:4},
		Right:&TreeNode{Val:3},
	},
}

3241423
返回

代码

package leetcode

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

// isSymmetric
// 对称二叉树
func isSymmetric(root *TreeNode) bool {
    // 根节点为nil则是对称二叉树
    if root == nil{
        return true
    }
    var order func(nodeL, nodeR *TreeNode) bool
    order = func(nodeL, nodeR *TreeNode) bool {
        // 同时为空
        if nodeL==nil && nodeR==nil{
            return true
        }
        // 一个为空一个不为空
        if nodeL==nil && nodeR != nil{
            return false
        }
        if nodeL!=nil && nodeR==nil{
            return false
        }
        // 递归校验 左节点的左子数与右节点的右子数 左节点的右子数和右节点的左子数
        if(nodeL.Val == nodeR.Val){
            return order(nodeL.Left, nodeR.Right) && order(nodeL.Right, nodeR.Left)
        }
        return false
    }
    return order(root.Left, root.Right)
}

参考

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/sy…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。