zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    怎样去阅读一份php源代码
    Cloudera Hadoop 4系列实战课程(电商业日志流量分析项目)
    ORACLE系列之SQL从入门到精通(全面把控数据库基础)
    jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化
    Unity3D游戏引擎实战开发从入门到精通
    中国移动:物联网项目实战开发企业级应用(ssp框架应用、EXTJS4.2、GoogleMap、JPA)
    基于OpenLayers实战地理信息系统(离线地图,通过基站转经纬度,Quartz深入,轨迹实战)
    Android自动化测试从入门到精通
    博客从新开张啦!
    python scrapy版 极客学院爬虫V2
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3632340.html
Copyright © 2011-2022 走看看