-
Notifications
You must be signed in to change notification settings - Fork 53
/
Copy path0101. Symmetric Tree.js
45 lines (42 loc) · 1.15 KB
/
0101. Symmetric Tree.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
//
// For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
//
// 1
// / \
// 2 2
// / \ / \
// 3 4 4 3
//
// But the following [1,2,2,null,3,null,3] is not:
// 1
// / \
// 2 2
// \ \
// 3 3
//
// Note:
// Bonus points if you could solve it both recursively and iteratively.
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
// Recursion
// Time O(n). Since traversing the entire input tree once, the total run time is O(n)
// Space O(n). The number of recursive calls is bound by the height of the tree. In the worst case, the tree is linear and the height is in O(n)
const isSymmetric = (root) => {
if (root == null) return true;
const isMirror = (a, b) => {
if (a == null && b == null) return true;
if (a == null || b == null || a.val !== b.val) return false;
return isMirror(a.left, b.right) && isMirror(a.right, b.left);
};
return isMirror(root.left, root.right);
};