Skip to content

Commit 8fd1365

Browse files
authored
Update 1597-build-binary-expression-tree-from-infix-expression.js
1 parent 048c007 commit 8fd1365

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

1597-build-binary-expression-tree-from-infix-expression.js

+59
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,62 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function Node(val, left, right) {
4+
* this.val = (val===undefined ? " " : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {string} s
11+
* @return {Node}
12+
*/
13+
const expTree = function (s) {
14+
const n = s.length
15+
const head = new Node()
16+
let i = 0
17+
const number = () => {
18+
let num = ''
19+
while (i < n && '0' <= s[i] && s[i] <= s[i]) {
20+
num += s[i++]
21+
}
22+
return new Node(Number(num))
23+
}
24+
const factor = () => {
25+
if (s[i] === '(') {
26+
i++
27+
const node = expression()
28+
i++
29+
return node
30+
}
31+
return number()
32+
}
33+
const term = () => {
34+
let left = factor()
35+
while (i < n && (s[i] === '*' || s[i] === '/')) {
36+
const op = new Node(s[i++])
37+
const right = factor()
38+
op.left = left
39+
op.right = right
40+
left = op
41+
}
42+
return left
43+
}
44+
const expression = () => {
45+
let left = term()
46+
while (i < s.length && (s[i] === '+' || s[i] === '-')) {
47+
const op = new Node(s[i++])
48+
const right = term()
49+
op.left = left
50+
op.right = right
51+
left = op
52+
}
53+
return left
54+
}
55+
return expression()
56+
}
57+
58+
// another
59+
160
/**
261
* Definition for a binary tree node.
362
* function Node(val, left, right) {

0 commit comments

Comments
 (0)