1. 程式人生 > 其它 >LintCode 378. 將二叉樹轉換成雙鏈表(非遞迴遍歷)

LintCode 378. 將二叉樹轉換成雙鏈表(非遞迴遍歷)

技術標籤: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阿明),一起加油、一起學習進步!
Michael阿明