將二叉搜尋樹轉為平衡二叉樹
阿新 • • 發佈:2021-08-11
題目連結:https://leetcode-cn.com/problems/balance-a-binary-search-tree
題目描述:
給你一棵二叉搜尋樹,請你返回一棵平衡後的二叉搜尋樹,新生成的樹應該與原來的樹有著相同的節點值。
如果一棵二叉搜尋樹中,每個節點的兩棵子樹高度差不超過 1 ,我們就稱這棵二叉搜尋樹是平衡的 。
如果有多種構造方法,請你返回任意一種。
題解:
/** * 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: vector<int> tree; TreeNode* balanceBST(TreeNode* root) { inorder(root); return build(0, tree.size() - 1); } void inorder(TreeNode* root) { if(root == nullptr) return; if(root->left != nullptr) inorder(root->left); tree.push_back(root->val); if(root->right != nullptr) inorder(root->right); } TreeNode* build(int left, int right) { if(left > right) return nullptr; int mid = (left + right) / 2; TreeNode* node = new TreeNode(tree[mid]); node->left = build(left, mid - 1); node->right = build(mid + 1, right); return node; } };