将一个二叉树按照中序遍历转换成双向链表。
样例
样例 1:
输入:
4
/ \
2 5
/ \
1 3
输出: 1<->2<->3<->4<->5
样例 2:
输入:
3
/ \
4 1
输出:4<->3<->1
输入测试数据 (每行一个参数)如何理解测试数据?
/**
* Definition of Doubly-ListNode
* class DoublyListNode {
* public:
* int val;
* DoublyListNode *next, *prev;
* DoublyListNode(int val) {
* this->val = val;
* this->prev = this->next = NULL;
* }
* } * Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root of tree
* @return: the head of doubly list node
*/
vector<int> nums;
DoublyListNode * bstToDoublyList(TreeNode * root)
{
// write your code here
if(root == NULL)
return NULL;
bianli(root);
return con(nums);
}
void bianli(TreeNode * root)
{
if(root != NULL)
{
bianli(root->left);
nums.push_back(root->val);
bianli(root->right);
}
}
DoublyListNode* con(vector<int>& nums)
{
DoublyListNode* ret = NULL;
DoublyListNode* tail = NULL;
int size = nums.size();
for(int i = 0; i < size; i++)
{
DoublyListNode* tmp = new DoublyListNode(nums[i]);
if(ret == NULL)
{
ret = tmp;
tail = tmp;
}
else
{
tail->next = tmp;
tmp->prev = tail;
tail = tmp;
}
}
return ret;
}
};