#include <iostream>
#include <vector>
using namespace std;
//双链表节点结构
typedef struct treeNode {
int value;
struct treeNode* left;
struct treeNode* right;
treeNode(int x) : value(x), left(nullptr), right(nullptr) {}
} TreeNode;
void treeToDoublyList(TreeNode* root, TreeNode*& prev, TreeNode*& head)
{
if (root == nullptr)
{
return;
}
//使用中序遍历
treeToDoublyList(root->left, prev, head);
if (prev != nullptr)
{
prev->right = root;
root->left = prev;
}
else
{
head = root;
}
//TreeNode* right = root->right; //保存右子树节点
//head->left = root;
//root->right = head;
prev = root;
treeToDoublyList(root->right, prev, head);
}
TreeNode* treeToDoublyList(TreeNode* root)
{
if(root == nullptr)
{
return nullptr;
}
TreeNode* prev = nullptr;
TreeNode* head = nullptr;
treeToDoublyList(root, prev, head);
//首尾相连
head->left = prev;
prev->right = head;
return head;
}
int main()
{
// 构建二叉搜索树
TreeNode* root = new TreeNode(4);
root->left = new TreeNode(2);
root->right = new TreeNode(5);
root->left->left = new TreeNode(1);
root->left->right = new TreeNode(3);
// 4
// 2 5
// 1 3
// 转换为双向链表
TreeNode* head = treeToDoublyList(root);
// 遍历双向链表
TreeNode* current = head;
while (current != nullptr) {
std::cout << current->value << " ";
current = current->right;
if (current == head) {
break;
}
}
system("pause");
return 0;
}
https://blog.csdn.net/chenchenchencl/article/details/127246377