题目链接: leetcode.
二叉搜索树的中序遍历是递增数列
中序遍历时,记录上一个节点pre
,即为当前节点左边紧邻的节点,更新指针后遍历下一个节点(root->right
),同时pre
指向当前节点。
注意
head
节点的确定(没有pre
节点)
注意结束时头尾节点相连
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node() {}
Node(int _val) {
val = _val;
left = NULL;
right = NULL;
}
Node(int _val, Node* _left, Node* _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
/*
执行用时:8 ms, 在所有 C++ 提交中击败了78.43%的用户
内存消耗:7.4 MB, 在所有 C++ 提交中击败了81.34%的用户
*/
class Solution {
public:
Node* head;
Node* pre;
void dfs(Node* root)
{
if(!root)
return;
dfs(root -> left);
if(pre == NULL)
{
head = root;
}
else
{
pre -> right = root;
root -> left = pre;
}
pre = root;
dfs(root -> right);
}
Node* treeToDoublyList(Node* root) {
if(root == nullptr)
return root;
pre = NULL;
dfs(root);
head -> left = pre;
pre -> right = head;
return head;
}
};