diff --git a/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README.md b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README.md index 24e5166b36ab4..68afbf7004954 100644 --- a/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README.md +++ b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README.md @@ -182,6 +182,92 @@ public: }; ``` +#### TypeScript + +```ts +function recoverFromPreorder(traversal: string): TreeNode | null { + const stack: TreeNode[] = []; + let i = 0; + + while (i < traversal.length) { + let depth = 0; + while (i < traversal.length && traversal[i] === '-') { + depth++; + i++; + } + + let num = 0; + while (i < traversal.length && !Number.isNaN(+traversal[i])) { + num = num * 10 + +traversal[i]; + i++; + } + + // Create the new node + const newNode = new TreeNode(num); + + while (stack.length > depth) { + stack.pop(); + } + + if (stack.length > 0) { + const i = stack.length - 1; + if (stack[i].left === null) { + stack[i].left = newNode; + } else { + stack[i].right = newNode; + } + } + + stack.push(newNode); + } + + return stack.length ? stack[0] : null; +} +``` + +#### JavaScript + +```js +function recoverFromPreorder(traversal) { + const stack = []; + let i = 0; + + while (i < traversal.length) { + let depth = 0; + while (i < traversal.length && traversal[i] === '-') { + depth++; + i++; + } + + let num = 0; + while (i < traversal.length && !Number.isNaN(+traversal[i])) { + num = num * 10 + +traversal[i]; + i++; + } + + // Create the new node + const newNode = new TreeNode(num); + + while (stack.length > depth) { + stack.pop(); + } + + if (stack.length > 0) { + const i = stack.length - 1; + if (stack[i].left === null) { + stack[i].left = newNode; + } else { + stack[i].right = newNode; + } + } + + stack.push(newNode); + } + + return stack.length ? stack[0] : null; +} +``` + diff --git a/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README_EN.md b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README_EN.md index 1d9e1579b27ad..2074214c92b8d 100644 --- a/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README_EN.md +++ b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/README_EN.md @@ -177,6 +177,92 @@ public: }; ``` +#### TypeScript + +```ts +function recoverFromPreorder(traversal: string): TreeNode | null { + const stack: TreeNode[] = []; + let i = 0; + + while (i < traversal.length) { + let depth = 0; + while (i < traversal.length && traversal[i] === '-') { + depth++; + i++; + } + + let num = 0; + while (i < traversal.length && !Number.isNaN(+traversal[i])) { + num = num * 10 + +traversal[i]; + i++; + } + + // Create the new node + const newNode = new TreeNode(num); + + while (stack.length > depth) { + stack.pop(); + } + + if (stack.length > 0) { + const i = stack.length - 1; + if (stack[i].left === null) { + stack[i].left = newNode; + } else { + stack[i].right = newNode; + } + } + + stack.push(newNode); + } + + return stack.length ? stack[0] : null; +} +``` + +#### JavaScript + +```js +function recoverFromPreorder(traversal) { + const stack = []; + let i = 0; + + while (i < traversal.length) { + let depth = 0; + while (i < traversal.length && traversal[i] === '-') { + depth++; + i++; + } + + let num = 0; + while (i < traversal.length && !Number.isNaN(+traversal[i])) { + num = num * 10 + +traversal[i]; + i++; + } + + // Create the new node + const newNode = new TreeNode(num); + + while (stack.length > depth) { + stack.pop(); + } + + if (stack.length > 0) { + const i = stack.length - 1; + if (stack[i].left === null) { + stack[i].left = newNode; + } else { + stack[i].right = newNode; + } + } + + stack.push(newNode); + } + + return stack.length ? stack[0] : null; +} +``` + diff --git a/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/Solution.js b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/Solution.js new file mode 100644 index 0000000000000..9a1c5b9a4257e --- /dev/null +++ b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/Solution.js @@ -0,0 +1,38 @@ +function recoverFromPreorder(traversal) { + const stack = []; + let i = 0; + + while (i < traversal.length) { + let depth = 0; + while (i < traversal.length && traversal[i] === '-') { + depth++; + i++; + } + + let num = 0; + while (i < traversal.length && !Number.isNaN(+traversal[i])) { + num = num * 10 + +traversal[i]; + i++; + } + + // Create the new node + const newNode = new TreeNode(num); + + while (stack.length > depth) { + stack.pop(); + } + + if (stack.length > 0) { + const i = stack.length - 1; + if (stack[i].left === null) { + stack[i].left = newNode; + } else { + stack[i].right = newNode; + } + } + + stack.push(newNode); + } + + return stack.length ? stack[0] : null; +} diff --git a/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/Solution.ts b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/Solution.ts new file mode 100644 index 0000000000000..3bfcc61f33712 --- /dev/null +++ b/solution/1000-1099/1028.Recover a Tree From Preorder Traversal/Solution.ts @@ -0,0 +1,38 @@ +function recoverFromPreorder(traversal: string): TreeNode | null { + const stack: TreeNode[] = []; + let i = 0; + + while (i < traversal.length) { + let depth = 0; + while (i < traversal.length && traversal[i] === '-') { + depth++; + i++; + } + + let num = 0; + while (i < traversal.length && !Number.isNaN(+traversal[i])) { + num = num * 10 + +traversal[i]; + i++; + } + + // Create the new node + const newNode = new TreeNode(num); + + while (stack.length > depth) { + stack.pop(); + } + + if (stack.length > 0) { + const i = stack.length - 1; + if (stack[i].left === null) { + stack[i].left = newNode; + } else { + stack[i].right = newNode; + } + } + + stack.push(newNode); + } + + return stack.length ? stack[0] : null; +}