13. Balance a Binary Search Tree
Input: root = [1,null,2,null,3,null,4,null,null]
Output: [2,1,3,null,null,null,4]
Explanation: This is not the only correct answer, [3,1,4,null,2,null,null] is also correct.Solution: (Using Inorder and Recursion)
class Solution
{
public:
TreeNode *createTree(vector<int> v, int start, int end)
{
if (start > end)
{
return NULL;
}
int mid = (start + end) / 2;
TreeNode *temp = new TreeNode;
temp->val = v[mid];
temp->left = createTree(v, start, mid - 1);
temp->right = createTree(v, mid + 1, end);
return temp;
}
TreeNode *balanceBST(TreeNode *root)
{
stack<TreeNode *> s;
vector<int> v;
TreeNode *t = root;
while (!s.empty() || t != NULL)
{
if (t != NULL)
{
s.push(t);
t = t->left;
}
else
{
t = s.top();
s.pop();
v.push_back(t->val);
t = t->right;
}
}
TreeNode *res = createTree(v, 0, v.size() - 1);
return res;
}
};Using the same node instead of creating new node. New node creation takes more time
Previous12. Binary Search Tree to Greater Sum Tree / Greater TreeNext14. Binary Search Tree Iterator
Last updated

