剑指 Offer 36. 二叉搜索树与双向链表
本题比较重要的有两点:
1.一般认为有序的二叉搜索树,都是中序遍历。
2.中序遍历的递归顺序,得到的就是排好序的,就是链表的顺序,因此只需管遍历的过程中的链表指向即可。
class Solution { public: // pre将来指向尾节点,head指向头节点 Node *pre = nullptr, *head = nullptr; Node* treeToDoublyList(Node* root) { if(root == nullptr) return root; dfs(root); head->left = pre; pre->right = head; return head; } void dfs(Node *root) { if(root == nullptr) return; dfs(root->left); // 左子树 // 前驱节点右指针指向当前节点 if(pre != nullptr) pre->right = root; // 否则链表正在访问头节点 else head = root; // 保存链表头节点 root->left = pre; pre = root; dfs(root->right); } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?