左神算法书籍《程序员代码面试指南》——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功能的栈