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

Posted zzw1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表相关的知识,希望对你有一定的参考价值。

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

 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将搜索二叉树转换成双向链表的主要内容,如果未能解决你的问题,请参考以下文章

左神算法书籍《程序员代码面试指南》——2_06判断一个链表是否为回文结构

左神算法书籍《程序员代码面试指南》——1_06用栈来求解汉诺塔问题

左神算法书籍《程序员代码面试指南》——3_02打印二叉树的边界节点★★

左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈

左神算法书籍《程序员代码面试指南》——2_07将单向链表按某值划分成左边小中间相等右边大的形式

左神算法书籍《程序员代码面试指南》——1_10最大值减去最小值小于或等于num的子数组数量