剑指 Offer 36. 二叉搜索树与双向链表
= > 
将一棵BST转化为一个排序的双向循环链表,返回头结点,“head” 表示指向链表中有最小元素的节点。
由于是二叉搜索树,所以最左结点是最小元素的结点。
要有序,所以选择中序遍历。
/* // 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; } }; */ class Solution { private: Node* head = nullptr; Node* tail = nullptr; public: void inOrder(Node* root) { if(!root) return ; inOrder(root->left); //遍历左子树这条递归可以找到最左结点 if(!tail) head = root; //将头指针指向最左节点 else { tail->right = root; //双向循环链表的关系指针 root->left = tail; } tail = root; //更新尾指针 inOrder(root->right); } Node* treeToDoublyList(Node* root) { if(!root) return nullptr; inOrder(root); //中序遍历整棵树 head->left = tail; //将首尾结点建立连接 tail->right = head; return head; } };
浙公网安备 33010602011771号