1008. 前序遍历构造二叉搜索树
返回与给定前序遍历 preorder 相匹配的二叉搜索树(binary search tree)的根结点。
(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于 node.left 的任何后代,值总 < node.val,而 node.right 的任何后代,值总 > node.val。此外,前序遍历首先显示节点 node 的值,然后遍历 node.left,接着遍历 node.right。)
题目保证,对于给定的测试用例,总能找到满足要求的二叉搜索树。
链接
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
|
function bstFromPreorder(preorder: number[]): TreeNode | null { if (preorder.length === 0) return null function traverse(preorder: number[], startIndex: number, endIndex: number) { if (startIndex > endIndex) return null const node = new TreeNode(preorder[startIndex]) let leftEndIndex = startIndex + 1 for(; leftEndIndex <= endIndex; leftEndIndex++) { if (preorder[startIndex] < preorder[leftEndIndex]) break } node.left = traverse(preorder, startIndex + 1, leftEndIndex - 1) node.right = traverse(preorder, leftEndIndex, endIndex) return node } return traverse(preorder, 0, preorder.length - 1) };
|