Problem:
Given two binary trees, write a function to check if they are the same or not.
Two binary trees are considered the same if they are structurally identical and the nodes have the same value.
Solution
Using Breadth-First Search traverse trees and compare nodes during traversal.
/**
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* }
*/
class Solution {
func isSameTree(_ p: TreeNode?, _ q: TreeNode?) -> Bool {
if (p == nil) {
if (q == nil) {
return true
} else {
return false
}
} else {
if (q == nil) {return false}
}
var queue: [TreeNode] = []
var queue2: [TreeNode] = []
queue.append(p!)
queue2.append(q!)
while (queue.count > 0) {
if (queue[0].val != queue2[0].val) {
return false
}
if (queue[0].left != nil) {
queue.append(queue[0].left!)
if(queue2[0].left != nil) {
queue2.append(queue2[0].left!)
} else { return false }
} else {
if (queue2[0].left != nil) {return false}
}
if (queue[0].right != nil) {
queue.append(queue[0].right!)
if(queue2[0].right != nil) {
queue2.append(queue2[0].right!)
} else { return false }
}else {
if (queue2[0].right != nil) {return false}
}
queue.remove(at:0)
queue2.remove(at:0)
}
return true
}
}