LintCode 378. 將二叉樹轉換成雙鏈表(非遞迴遍歷)
阿新 • • 發佈:2021-02-03
技術標籤:LintCode及其他OJ
文章目錄
1. 題目
將一個二叉樹按照中序遍歷轉換成雙向連結串列。
樣例
樣例 1:
輸入:
4
/ \
2 5
/ \
1 3
輸出: 1<->2<->3<->4<->5
樣例 2:
輸入:
3
/ \
4 1
輸出:4<->3<->1
https://www.lintcode.com/problem/convert-binary-tree-to-doubly-linked-list/description
2. 解題
- 非遞迴中序遍歷,使用棧
/**
* 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
*/
DoublyListNode * bstToDoublyList(TreeNode * root) {
// write your code here
if(!root) return NULL;
stack<TreeNode*> stk;
DoublyListNode * h = new DoublyListNode(-1), *pre = h;
while(!stk.empty() || root)
{
while(root)
{
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
DoublyListNode *cur = new DoublyListNode(root->val);
pre->next = cur;
cur->prev = pre;
pre = cur;
root = root->right;
}
DoublyListNode *head = h->next;
h->next = NULL;
head->prev = NULL;
delete h;
return head;
}
};
50 ms C++
我的CSDN部落格地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!