将二叉查找树转换成双链表-LintCode
2017-09-29 20:09
253 查看
将一个二叉查找树按照中序遍历转换成双向链表。
样例:
给定一个二叉查找树:
返回 1<->2<->3<->4<->5。
样例:
给定一个二叉查找树:
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
相关文章推荐
- lintcode:将二叉查找树转换成双链表
- LintCode-378.将二叉查找树转换成双链表
- [LintCode] 将二叉查找树转换成双链表 Convert Binary Search Tree to Doubly Linked List
- Lintcode 将二叉查找树转换成双链表
- LintCode将二叉查找树转换成双链表JAVA版
- [LintCode]378.将二叉查找树转换成双链表
- LintCode-剑指Offer-(378)将二叉查找树转换成双链表
- lintcode,将二叉查找树转换成双链表
- 【学习点滴-数据结构-二叉树】二叉查找树转换成双链表
- 将二叉查找树转换成双链表
- lintcode---将二叉查找树转换成双链表
- Lintcode 将二叉查找树转换为双链表
- 将二叉查找树转换成双链表
- 二叉查找树 转换成 排序的双向链表
- 将二叉查找树转换成双向链表 java实现
- 二叉排序树转换成双链表
- 树(1)把二叉查找树转换成有序的双向链表
- PHP 将二叉查找树转换为双向链表,要求不能创建新节点,只能调节节点指针
- 程序员面试金典——解题总结: 9.17中等难题 17.13将二叉查找树转换为双向链表
- 【July第1题】二叉排序树转换成双链表