class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
this.val = val === undefined ? 0 : val;
this.left = left === undefined ? null : left;
this.right = right === undefined ? null : right;
}
}
function isSymmetricTrees(t1: TreeNode | null, t2: TreeNode | null): boolean {
if (t1 === null && t2 === null) return true;
if (t1 === null || t2 === null) return false;
if (t1.val !== t2.val) return false;
return isSymmetricTrees(t1.left, t2.right) && isSymmetricTrees(t1.right, t2.left);
}
// Driver code to test
const tree1 = new TreeNode(1,
new TreeNode(2, new TreeNode(4), null),
new TreeNode(3)
);
const tree2 = new TreeNode(1,
new TreeNode(3, null, new TreeNode(4)),
new TreeNode(2)
);
console.log(isSymmetricTrees(tree1, tree2));if (t1 === null && t2 === null) return true;
both nodes null means symmetric at this branch
if (t1 === null || t2 === null) return false;
one node null and other not means not symmetric
if (t1.val !== t2.val) return false;
node values must match for symmetry
return isSymmetricTrees(t1.left, t2.right) && isSymmetricTrees(t1.right, t2.left);
recursively check left subtree of one with right subtree of other and vice versa