037_对称二叉树

知识点:二叉树遍历

LeetCode第一百零一题:https://leetcode-cn.com/problems/symmetric-tree/solution/

说是简单,在没看到答案之前也要想很久啊,官腔就是:思路没打开。

语言:GoLang

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 // 迭代,但是空间复杂度有点高
func isSymmetric(root *TreeNode) bool {
    if root == nil {
        return true
    }

    q := []*TreeNode{root.Left, root.Right}
    for len(q) > 0 {
        left, right := q[0], q[1]
        q = q[2:]

        if left == nil && right != nil {
            return false
        }
        if left != nil && right == nil {
            return false
        }

        if left != nil && right != nil {
            if left.Val != right.Val {
                return false
            }

            q = append(q, left.Left)
            q = append(q, right.Right)

            q = append(q, right.Left)
            q = append(q, left.Right)
        }
    }
    return true
}

// 递归,双百
func isSymmetric_(root *TreeNode) bool {
    if root == nil {
        return true
    }

    return traverse(root.Left, root.Right) 
}

func traverse(left *TreeNode, right *TreeNode) bool {
    if left == nil && right == nil {
        return true
    }

    if left == nil || right == nil {
        return false
    }

    if left.Val == right.Val {
        return traverse(left.Left, right.Right) && traverse(right.Left, left.Right)
    } else {
        return false
    }
}
posted @ 2020-03-26 19:29  Cenyol  阅读(92)  评论(0)    收藏  举报