Created
June 19, 2022 10:41
-
-
Save derekli66/b9f1e4a7cdfed9aba9ebfaf7b4192cb6 to your computer and use it in GitHub Desktop.
The solution to LeetCode problem, https://leetcode.com/problems/symmetric-tree/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Definition for a binary tree node. | |
* public class TreeNode { | |
* public var val: Int | |
* public var left: TreeNode? | |
* public var right: TreeNode? | |
* public init() { self.val = 0; self.left = nil; self.right = nil; } | |
* public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; } | |
* public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) { | |
* self.val = val | |
* self.left = left | |
* self.right = right | |
* } | |
* } | |
*/ | |
class Queue<T> { | |
private var array = [T]() | |
func enque(_ val: T) { | |
array.append(val) | |
} | |
func deque() -> T? { | |
if isEmpty() { return nil } | |
let temp = array[0] | |
array.remove(at: 0) | |
return temp | |
} | |
func popBack() -> T? { | |
if isEmpty() { return nil } | |
let temp = array.last! | |
array.removeLast() | |
return temp | |
} | |
func count() -> Int { | |
return array.count | |
} | |
func isEmpty() -> Bool { | |
return array.count == 0 | |
} | |
} | |
class Solution { | |
func isSymmetric(_ root: TreeNode?) -> Bool { | |
if root == nil { true } | |
if root!.left == nil && root!.right == nil { return true } | |
if root!.left == nil || root!.right == nil { return false } | |
let queue = Queue<TreeNode>() | |
let layers = Queue<Int>() | |
queue.enque(root!) | |
layers.enque(root!.val) | |
var lastLayer = 0 | |
var lastArray = [Int?]() | |
while queue.isEmpty() == false { | |
let node = queue.deque()! | |
let layer = layers.deque()! | |
if lastLayer != layer { | |
lastLayer = layer | |
if !isSymArray(lastArray) { | |
return false | |
} | |
lastArray = [Int?]() | |
} | |
if node.left != nil { | |
queue.enque(node.left!) | |
layers.enque(layer+1) | |
lastArray.append(node.left!.val) | |
} | |
else { | |
lastArray.append(nil) | |
} | |
if node.right != nil { | |
queue.enque(node.right!) | |
layers.enque(layer+1) | |
lastArray.append(node.right!.val) | |
} | |
else { | |
lastArray.append(nil) | |
} | |
} | |
return true | |
} | |
private func isSymArray(_ array: [Int?]) -> Bool { | |
if array.count < 2 { return true } | |
var front = 0 | |
var back = array.count - 1 | |
while front <= back { | |
if array[front] != array[back] { | |
return false | |
} | |
front += 1 | |
back -= 1 | |
} | |
return true | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment