Symmetric Tree
EasyTreeDepth-First SearchBreadth-First SearchBinary Tree
Solution
import { TreeNode } from '@algorithm/lib';
/* Recursive Solution */
export function isSymmetricRecursive(root: TreeNode | null): boolean {
if (root === null) {
return true;
}
function recursive(leftNode: TreeNode | null, rightNode: TreeNode | null): boolean {
if (leftNode === null || rightNode === null) {
return leftNode === rightNode;
}
if (leftNode.val !== rightNode.val) {
return false;
}
return recursive(leftNode.left, rightNode.right) && recursive(leftNode.right, rightNode.left);
}
return recursive(root.left, root.right);
}
/* Iterative Solution */
export function isSymmetricIterative(root: TreeNode | null): boolean {
if (root === null) {
return true;
}
const queue = [[root.left, root.right]];
while (queue.length) {
const pair = queue.shift();
if (pair) {
const [leftNode, rightNode] = pair;
if (leftNode === null && rightNode === null) {
continue;
}
if (leftNode === null || rightNode === null) {
return false;
}
if (leftNode.val === rightNode.val) {
queue.push([leftNode.left, rightNode.right]);
queue.push([leftNode.right, rightNode.left]);
} else {
return false;
}
}
}
return true;
}