本文共 1437 字,大约阅读时间需要 4 分钟。
为了将二叉搜索树转换为排序的循环双向链表,我们可以利用二叉搜索树的中序遍历特性。中序遍历的结果即为从小到大的顺序,这正好适合链表的元素排列方式。以下是详细的解决方案:
class Node { int val; Node* left; Node* right; Node(int _val) { val = _val; left = null; right = null; }}class Solution { Node* pre; Node* head; void dfs(Node* cur) { if (cur == null) { return; } // 中序遍历处理左子树 dfs(cur->left); // 当前节点的前驱是pre节点,当前节点的右指向pre if (pre != null) { pre->right = cur; } else { head = cur; } // 当前节点的左指向pre节点 cur->left = pre; // 更新pre为当前节点 pre = cur; // 处理右子树 dfs(cur->right); } Node* treeToDoublyList(Node* root) { if (root == null) { return null; } dfs(root); // 头节点的左指向pre(即最后一个节点) head->left = pre; // 最后一个节点的右指向头节点,形成循环 pre->right = head; return head; }}
dfs
和转换函数treeToDoublyList
。dfs
: treeToDoublyList
: 通过上述方法,可以将二叉搜索树转换为循环双向链表,满足题目要求。
转载地址:http://xbquz.baihongyu.com/