【LeetCode】C++ :簡單題 - 遞迴 897. 遞增順序查詢樹
阿新 • • 發佈:2021-01-11
難度簡單131
給你一個樹,請你按中序遍歷重新排列樹,使樹中最左邊的結點現在是樹的根,並且每個結點沒有左子結點,只有一個右子結點。
示例 :
輸入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9 輸出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9提示:
- 給定樹中的結點數介於
1
和100
之間。- 每個結點都有一個從
0
到1000
範圍內的唯一整數值。
這題還有很多疑問呢!讓我想想,再想想
/** * 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<TreeNode*> nodes; TreeNode* increasingBST(TreeNode* root) { vector<int> res; sorted(root, res); TreeNode* ans = new TreeNode(0); TreeNode* cur = ans; for(int v: res){ cur->right = new TreeNode(v); cur = cur->right; } return ans->right; } void sorted(TreeNode* root, vector<int> &res){ if (root == nullptr){ return ; } sorted(root->left, res); res.push_back(root->val); sorted(root->right, res); } };