玩命加载中 . . .

1008-从先序遍历构建二叉搜索树


LeetCode 1008. Construct Binary Search Tree from Preorder Traversal

Given an array of integers preorder, which represents the preorder traversal of a BST (i.e., binary search tree), construct the tree and return its root.

It is guaranteed that there is always possible to find a binary search tree with the given requirements for the given test cases.

A binary search tree is a binary tree where for every node, any descendant of Node.left has a value strictly less than Node.val, and any descendant of Node.right has a value strictly greater than Node.val.

A preorder traversal of a binary tree displays the value of the node first, then traverses Node.left, then traverses Node.right.

Example 1:

Input: preorder = [8,5,1,7,10,12]
Output: [8,5,10,1,7,null,12]

method

找到第一个大于根节点的数,其后面就是右子树,前面就是左子树

TreeNode* traversal(vector<int>& pre, int l, int r) {
    if (l >= r) return nullptr;     // (l, r)
    TreeNode *root = new TreeNode(pre[l]);
    int idx = l + 1;
    for (; idx < r; idx++) {
        if (pre[idx] > root->val) break;
    }
    root->left = traversal(pre, l + 1, idx);
    root->right = traversal(pre, idx, r);
    return root;
}
TreeNode* bstFromPreorder(vector<int>& preorder) {
    int n = preorder.size();
    return traversal(preorder, 0, n);
}

文章作者: kunpeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kunpeng !
  目录