zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    浩然战法--黄金柱选股
    《含泪活着》主人公一一丁尚彪,叙述在日本当黑户口的危险经历,美国《世界日报》2017年3月16日连载
    Java8与JDK8和JDK1.8有什么区别?
    ThreadLocal
    什么是jsonp
    Java中比较对象大小的两种实现方式
    MySQL教程之concat以及group_concat的用法
    多级树形结构和sql查询实现
    mysql树形结构递归查询
    Maven配置教程
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/5782540.html
Copyright © 2011-2022 走看看