• Data Structure Binary Tree: Convert a given Binary Tree to Doubly Linked List


    http://www.geeksforgeeks.org/in-place-convert-a-given-binary-tree-to-doubly-linked-list/

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <queue>
     5 #include <stack>
     6 #include <string>
     7 #include <fstream>
     8 #include <map>
     9 using namespace std;
    10 
    11 struct node {
    12     int data;
    13     struct node *left, *right;
    14     node() : data(0), left(NULL), right(NULL) { }
    15     node(int d) : data(d), left(NULL), right(NULL) { }
    16 };
    17 
    18 node *_convert(node *root) {
    19     if (!root) return NULL;
    20     if (root->left) {
    21         node *left = _convert(root->left);
    22         while (left->right) left = left->right;
    23         left->right = root;
    24         root->left = left;
    25     }
    26     if (root->right) {
    27         node *right = _convert(root->right);
    28         while (right->left) right = right->left;
    29         right->left = root;
    30         root->right = right;
    31     }
    32     return root;
    33 }
    34 
    35 node *convert(node *root) {
    36     if (!root) return NULL;
    37     root = _convert(root);
    38     while (root->left) root = root->left;
    39     return root;
    40 }
    41 
    42 int main() {
    43     node *root = new node(10);
    44     root->left = new node(12);
    45     root->right = new node(15);
    46     root->left->left = new node(25);
    47     root->left->right = new node(30);
    48     root->right->left = new node(36);
    49     node *head = convert(root);
    50     while (head) {
    51         cout << head->data << " ";
    52         head = head->right;
    53     }
    54     return 0;
    55 }

    http://www.geeksforgeeks.org/convert-a-given-binary-tree-to-doubly-linked-list-set-2/

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <queue>
     5 #include <stack>
     6 #include <string>
     7 #include <fstream>
     8 #include <map>
     9 using namespace std;
    10 
    11 struct node {
    12     int data;
    13     struct node *left, *right;
    14     node() : data(0), left(NULL), right(NULL) { }
    15     node(int d) : data(d), left(NULL), right(NULL) { }
    16 };
    17 
    18 void fixpre(node *root) {
    19     static node *pre = NULL;
    20     if (!root) return;
    21     fixpre(root->left);
    22     root->left = pre;
    23     pre = root;
    24     fixpre(root->right);
    25 }
    26 
    27 node *fixnext(node *root) {
    28     node *pre = NULL;
    29     while (root && root->right) root = root->right;
    30     while (root && root->left) {
    31         pre = root;
    32         root = root->left;
    33         root->right = pre;
    34     }
    35     return root;
    36 }
    37 
    38 node *convert(node *root) {
    39     if (!root) return NULL;
    40     fixpre(root);
    41     return fixnext(root);
    42 }
    43 
    44 int main() {
    45     node *root = new node(10);
    46     root->left = new node(12);
    47     root->right = new node(15);
    48     root->left->left = new node(25);
    49     root->left->right = new node(30);
    50     root->right->left = new node(36);
    51     node *head = convert(root);
    52     while (head) {
    53         cout << head->data << " ";
    54         head = head->right;
    55     }
    56     return 0;
    57 }

    http://www.geeksforgeeks.org/convert-given-binary-tree-doubly-linked-list-set-3/

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <queue>
     5 #include <stack>
     6 #include <string>
     7 #include <fstream>
     8 #include <map>
     9 using namespace std;
    10 
    11 struct node {
    12     int data;
    13     struct node *left, *right;
    14     node() : data(0), left(NULL), right(NULL) { }
    15     node(int d) : data(d), left(NULL), right(NULL) { }
    16 };
    17 
    18 void convert(node *root, node *&head) {
    19     if (!root) return;
    20     static node *pre = NULL;
    21     convert(root->left, head);
    22     if (pre == NULL) head = root;
    23     else {
    24         root->left = pre;
    25         pre->right = root;
    26     }
    27     pre = root;
    28     convert(root->right, head);
    29 }
    30 
    31 int main() {
    32     node *root = new node(10);
    33     root->left = new node(12);
    34     root->right = new node(15);
    35     root->left->left = new node(25);
    36     root->left->right = new node(30);
    37     root->right->left = new node(36);
    38     node *head = NULL;
    39     convert(root, head);
    40     while (head) {
    41         cout << head->data << " ";
    42         head = head->right;
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    Fiddler工具抓包
    简单Ant打包
    android中ActionBar的几个属性
    yum安装php7.2
    java 获取计算机内存
    docker apache安装
    docker 安装 openresty
    docker 安装nginx
    docker安装gitlab
    java获取时间格式
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3632340.html
Copyright © 2020-2023  润新知