码迷,mamicode.com
首页 > 编程语言 > 详细

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表

时间:2019-09-01 23:44:54      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:void   main   双向   程序   new   指针   creat   namespace   代码   

对二叉树的节点来说,有本身的值域,有指向左孩子和右孩子的两个指针;对双向链表的节点来说,有本身的值域,有指向上一个节点和下一个节点的指针。在结构上,两种结构有相似性,现在有一棵搜索二叉树,请将其转换为一个有序的双向链表。

 1 #include <iostream>
 2 #include <queue>
 3 using namespace std;
 4 struct treeNode
 5 {
 6     int v;
 7     treeNode *l, *r;
 8     treeNode(int a = -1) :v(a), l(nullptr), r(nullptr) {}
 9 };
10 struct listNode
11 {
12     int v;
13     listNode *pre, *next;
14     listNode(int a = -1) :v(a), pre(nullptr), next(nullptr) {}
15 };
16 treeNode* root = new treeNode(6);
17 listNode* head = new listNode(-1);
18 queue<int>qD;
19 void creatTree()
20 {
21     root->l = new treeNode(4);
22     root->r = new treeNode(7);
23     root->l->l = new treeNode(2);
24     root->l->r = new treeNode(5);
25     root->l->l->l = new treeNode(1);
26     root->l->l->r = new treeNode(3);
27     root->r->r = new treeNode(9);
28     root->r->l = new treeNode(8);
29 }
30 void getData(treeNode* rt)
31 {
32     if (rt == nullptr)
33         return;
34     getData(rt->l);
35     qD.push(rt->v);
36     getData(rt->r);
37 }
38 void creatList()
39 {
40     listNode* p = head;
41     while (!qD.empty())
42     {
43         listNode* q = new listNode(qD.front());
44         qD.pop();
45         p->next = q;
46         q->pre = p;
47         p = q;
48     }
49 }
50 void printD()
51 {
52     listNode* p = head->next;
53     while (p != nullptr)
54     {
55         cout << p->v << " ";
56         p = p->next;
57     }
58 }
59 int main()
60 {
61     creatTree();
62     getData(root);
63     creatList();
64     printD();
65     return 0;
66 }

 

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表

标签:void   main   双向   程序   new   指针   creat   namespace   代码   

原文地址:https://www.cnblogs.com/zzw1024/p/11444138.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!