文章目录
- 1. 题目
- 2. 解题
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 hereif(!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阿明),一起加油、一起学习进步!