剑指OFFER 二叉搜索树与双向链表
剑指OFFER 二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
分析
先按中序遍历一次,然后根据中序遍历的顺序来组织双向链表
代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<TreeNode*> v;
void construct_list(void)
{
int size = v.size();
if(size == 1){
v[0]->left = NULL;
v[0]->right = NULL;
return;
}
v[0]->left = NULL;
for(int i=1;i<size;i++)
{
v[i-1]->right = v[i];
v[i]->left = v[i-1];
}
v[size-1]->right = NULL;
}
//中序遍历
void recur(TreeNode* node)
{
if(node == NULL)return;
recur(node->left);
v.push_back(node);
recur(node->right);
}
TreeNode* Convert(TreeNode* root)
{
if(root == NULL)return NULL;
recur(root);
construct_list();
return v[0];
}
};