二叉搜索树和双向链表
题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/
题目:
因为是搜索树,中序遍历出来是升序的。分析:如下图
注意的细节递归时我们只需要1个prev,就不能传指针了,需要传引用。因为递归到每个栈,每个栈中都有prev。
右子树的操作跟左子树是一样的。
代码如下:
class Solution {
public:
Node* treeToDoublyList(Node* root) {
//root为空
if(root == nullptr)
return nullptr;
Node* prev = nullptr;
treeToDoublyList(root,prev);
Node* head = root;
while(head && head->left)
{
head = head->left;
}
//将头和尾链接起来
head->left=prev;
prev->right = head;
return head;//最后返回头指针
}
void treeToDoublyList(Node* cur,Node*& prev)
{
//cur为空递归结束
if(cur == nullptr)
return ;
//先递归左子树
treeToDoublyList(cur->left,prev);
//修改链接关系
//cur的left为前驱
cur->left = prev;
if(prev)
prev->right = cur;
prev = cur;
//再递归它的右树
treeToDoublyList(cur->right,prev);
}
};
就过了。