-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLeafSimilarTrees.ts
91 lines (79 loc) · 2.53 KB
/
LeafSimilarTrees.ts
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Source : https://leetcode.com/problems/leaf-similar-trees/
// Author : francisco
// Date : 2024-01-09
/*****************************************************************************************************
*
* Consider all the leaves of a binary tree, from left to right order, the values of those leaves form
* a leaf value sequence.
*
* For example, in the given tree above, the leaf value sequence is (6, 7, 4, 9, 8).
*
* Two binary trees are considered leaf-similar if their leaf value sequence is the same.
*
* Return true if and only if the two given trees with head nodes root1 and root2 are leaf-similar.
*
* Example 1:
*
* Input: root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 =
* [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
* Output: true
*
* Example 2:
*
* Input: root1 = [1,2,3], root2 = [1,3,2]
* Output: false
*
* Constraints:
*
* The number of nodes in each tree will be in the range [1, 200].
* Both of the given trees will have values in the range [0, 200].
******************************************************************************************************/
export type BST = TreeNode | null;
export class TreeNode {
val: number;
left: BST;
right: BST;
constructor(val: number = 0, left: BST = null, right: BST = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
/**
* @param {TreeNode | null} root1
* @param {TreeNode | null} root2
* @returns {boolean}
* return true if an only if the two given trees aer leaf-similar
* two BT are leaf-similar if their leaf value sequence is the same
* Template: recursion
* root1 constant - leaf value sequence
* compare leaf value sequences
*/
export function leafSimilar(
root1: TreeNode | null,
root2: TreeNode | null,
): boolean {
const root1LeafValueSequence: number[] = [];
function createLeafValueSequence(node: TreeNode | null): void {
if (node !== null) {
if (node.left === null && node.right === null) {
root1LeafValueSequence.push(node.val);
}
createLeafValueSequence(node.left);
createLeafValueSequence(node.right);
}
}
createLeafValueSequence(root1);
function compareLeafValueSequences(node: TreeNode | null): boolean {
if (node === null) return true;
if (node.left === null && node.right === null)
return root1LeafValueSequence.shift() === node.val;
return (
compareLeafValueSequences(node.left) &&
compareLeafValueSequences(node.right)
);
}
return (
compareLeafValueSequences(root2) && root1LeafValueSequence.length === 0
);
}