897. 递增顺序查找树
给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
示例 1:
输入:root = [5,3,6,2,4, null ,8,1, null , null , null ,7,9] 输出:[1, null ,2, null ,3, null ,4, null ,5, null ,6, null ,7, null ,8, null ,9]
https://leetcode.cn/problems/increasing-order-search-tree/#:~:text=%E8%BE%93%E5%85%A5%EF%BC%9Aroot%20%3D%20%5B5%2C3%2C6%2C2%2C4%2Cnull%2C8%2C1%2Cnull%2Cnull%2Cnull%2C7%2C9%5D%0A%E8%BE%93%E5%87%BA%EF%BC%9A%5B1%2Cnull%2C2%2Cnull%2C3%2Cnull%2C4%2Cnull%2C5%2Cnull%2C6%2Cnull%2C7%2Cnull%2C8%2Cnull%2C9%5D
输入:root = [5,3,6,2,4, null ,8,1, null , null , null ,7,9]
输出:[1, null ,2, null ,3, null ,4, null ,5, null ,6, null ,7, null ,8, null ,9]
输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/increasing-order-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 2:
输入:root = [5, 1, 7]
输出:[1, null, 5, null, 7]
提示:
树中节点数的取值范围是 [1, 100]
0 <= Node.val <= 1000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/increasing-order-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* 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* increasingBST(TreeNode* root)
{
if(!root) return nullptr;
stack<TreeNode*> st;
TreeNode *p = root, *res, *pre =nullptr;
while(!st.empty() || p)
{
while(p)
{
st.push(p);
p = p->left;
}
p = st.top();
st.pop();
if(!pre)
{
pre = p;
res = pre;
p = p->right;
}
else
{
pre->right = p;
pre = pre->right;
p->left = nullptr;
p = p->right;
}
}
return res;
}
};