Skip to content

Latest commit

 

History

History
104 lines (93 loc) · 2.56 KB

construct-bst-from-preorder.MD

File metadata and controls

104 lines (93 loc) · 2.56 KB

Construct Binary Search Tree from Preorder Traversal

https://leetcode.com/explore/challenge/card/may-leetcoding-challenge/537/week-4-may-22nd-may-28th/3339/


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* bstFromPreorder(vector<int>& preorder) {
        TreeNode* bst = NULL;
        for (int value: preorder) {
            insertToBst(bst, value);
        }
        return bst;
    }

private:
    void insertToBst(TreeNode*& tree, int value) {
        TreeNode* item = (TreeNode*)malloc(sizeof(TreeNode));
        item->val = value;
        item->left = NULL;
        item->right = NULL;
        
        if (!tree) {
            tree = item;
        } else {
            TreeNode* ptr = tree;
            while (1) {
                if (item->val < ptr->val) {
                    if (ptr->left == NULL) {
                        ptr->left = item;
                        break;
                    } else {
                        ptr = ptr->left;
                    }
                } else {
                    if (ptr->right == NULL) {
                        ptr->right = item;
                        break;
                    } else {
                        ptr = ptr->right;
                    }
                }
            }
        }
        
    }
};
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* bstFromPreorder(vector<int>& preorder) {
        TreeNode* bst = NULL;
        for (int value: preorder) {
            bst = insertToBst(bst, value);
        }
        return bst;
    }

private:
    TreeNode* insertToBst(TreeNode* tree, int val) {
        if (!tree) {
            TreeNode* item = new TreeNode(val);
            return item;
        }
        
        if (val < tree->val) {
            tree->left = insertToBst(tree->left, val);
        } else {
            tree->right = insertToBst(tree->right, val);
        }
        return tree;
    }
};