题目分析:[[EVD]] - 剑指 Offer 36. 二叉搜索树与双向链表
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/
简单描述:
- 将该二叉搜索树转换成一个排序的循环双向链表
限制🚫
- 不能创建任何新的节点(就是说不能生成新的节点空间,但可以使用辅助指针去引用)
- 返回链表中的第一个节点的指针
示例:
转换成
解题思路:
思路:
- #DFS 中序遍历,添加左右指向,最后将头尾成链
效率:
- 时间复杂度
- 空间复杂度
代码:
class Solution
{
private:
Node *head, *pre;
void dfs(Node *cur)
{
if (!cur)
return;
dfs(cur->left);
if (!pre) //中序遍历到最小值节点时,设置头节点
head = cur;
else
pre->right = cur; //前继节点的右孩子为当前节点,类似1->2
cur->left = pre; //类似2->1
pre = cur; //更新前继节点为当前节点,以供下次使用
dfs(cur->right);
}
public:
/*中序遍历+头尾成链*/
Node *treeToDoublyList(Node *root)
{
if (!root)
return NULL;
dfs(root);
/*将头尾链接*/
head->left = pre;
pre->right = head;
return head;
}
};