• Convert Binary Search Tree to Doubly Linked List


    Convert a binary search tree to doubly linked list with in-order traversal.

    Example

    Given a binary search tree:

        4
       / 
      2   5
     / 
    1   3
    

    return 1<->2<->3<->4<->5

    Runtime: 15ms

     1 /**
     2  * Definition of TreeNode:
     3  * class TreeNode {
     4  * public:
     5  *     int val;
     6  *     TreeNode *left, *right;
     7  *     TreeNode(int val) {
     8  *         this->val = val;
     9  *         this->left = this->right = NULL;
    10  *     }
    11  * }
    12  * Definition of Doubly-ListNode
    13  * class DoublyListNode {
    14  * public:
    15  *     int val;
    16  *     DoublyListNode *next, *prev;
    17  *     DoublyListNode(int val) {
    18  *         this->val = val;
    19            this->prev = this->next = NULL;
    20  *     }
    21  * }
    22  */
    23 class Solution {
    24 public:
    25     /**
    26      * @param root: The root of tree
    27      * @return: the head of doubly list node
    28      */
    29     DoublyListNode* bstToDoublyList(TreeNode* root) {
    30         // Write your code here
    31         
    32         // do inorder traversal first
    33         vector<int> inorderStore;
    34         inorder(root, inorderStore);
    35         
    36         // use the values in vector to construct a double linked list
    37         DoublyListNode* pre= new DoublyListNode(0);
    38         return constructDoubleList(inorderStore, pre);
    39     }
    40 private:
    41     void inorder(TreeNode* root, vector<int>& inorderStore) {
    42         if(!root) return;
    43         inorder(root->left, inorderStore);
    44         inorderStore.push_back(root->val);
    45         inorder(root->right, inorderStore);
    46     }
    47     
    48     DoublyListNode* constructDoubleList(vector<int>& inorderStore, DoublyListNode* pre) {
    49         if(inorderStore.empty()) return NULL;
    50         
    51         DoublyListNode* move = pre;
    52         for (int i = 0; i < inorderStore.size(); i++) {
    53             DoublyListNode* temp = new DoublyListNode(inorderStore[i]);
    54             move->next = temp;
    55             move = move->next;
    56         }
    57         
    58         DoublyListNode* head = pre->next;
    59         head->prev = NULL;
    60         return head;
    61     }
    62 };
  • 相关阅读:
    Swift _ OC _ 混编
    CoreAnimation 寄宿图
    CoreAnimation 开篇
    iOS 杂笔-26(苹果禁用热更新)
    Swift_TableView(delegate,dataSource,prefetchDataSource 详解)
    Swift_ScrollView _ API详解
    插入排序_c++
    选择排序_c++
    冒泡排序_c++
    Swift_协议
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/5782540.html
Copyright © 2020-2023  润新知