解题思路:
二叉搜索树+中序遍历,深度优先中序遍历肯定是没跑了,为了将所有的节点串成串,我们需要初始化一个头结点和一个指向节点尾部的指针,每次遍历到最左边的子树的时候加入到序列中,代码如下:
/**
* 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 {
private:
// 提前定义好头和当前指针
TreeNode * node = new TreeNode(0);
TreeNode * cur = node;
public:
// 深度优先遍历
void dfs(TreeNode* root) {
// 如果是空
if(root == nullptr) {
return;
}
// 一直向左子树遍历
dfs(root -> left);
cur -> right = root;
root -> left = nullptr;
cur = cur -> right;
// 再往右子树遍历
dfs(root -> right);
}
TreeNode* increasingBST(TreeNode* root) {
if(root == nullptr || (root -> left == nullptr && root -> right == nullptr)) {
return root;
}
dfs(root);
return node -> right;
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/increasing-order-search-tree/solution/cshen-du-you-xian-bian-li-shen-du-you-xi-cq2d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/