您的位置:首页 > 其它

将二叉查找树转换成双链表-LintCode

2017-09-29 20:09 253 查看
将一个二叉查找树按照中序遍历转换成双向链表。

样例:

给定一个二叉查找树:

4
/ \
2   5
/ \
1   3


返回 1<->2<->3<->4<->5。

#ifndef C378_H
#define C378_H
#include<iostream>
#include<vector>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int val)
{
this->val = val;
this->left = this->right = NULL;
}
};
class DoublyListNode{
public:
int val;
DoublyListNode *prev, *next;
DoublyListNode(int val)
{
this->val = val;
this->prev = this->next = NULL;
}
};
class Solution {
public:
/*
* @param root: The root of tree
* @return: the head of doubly list node
*/
DoublyListNode * bstToDoublyList(TreeNode * root) {
// write your code here
if (root == NULL)
return NULL;
inOrder(root);
int len = v.size();
vector<DoublyListNode*> douList;
for (auto c : v)
douList.push_back(new DoublyListNode(c->val));
if (len == 1)
{
douList[0]->next = NULL;
douList[0]->prev = NULL;
return douList[0];
}
for (int i = 0; i < len; ++i)
{
if (i == 0)
{
douList[i]->next = douList[i + 1];
douList[i]->prev = NULL;
}
else if (i == len - 1)
{
douList[i]->next = NULL;
douList[i]->prev = douList[i - 1];
}
else
{
douList[i]->next = douList[i + 1];
douList[i]->prev = douList[i - 1];
}
}
return douList[0];
}
void inOrder(TreeNode *root)
{
if (root == NULL)
return;
inOrder(root->left);
v.push_back(root);
inOrder(root->right);
}
vector<TreeNode*> v;
};
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: