将搜索二叉树转换成有序的双向链表
来源:互联网 发布:2016年cms系统排行榜 编辑:程序博客网 时间:2024/05/16 01:57
根据搜索二叉树的性质:中序遍历是有序的,因此中序遍历搜索二叉树,将left相当于prev指向前一个小的数,right相当于next指向后一个较大的数。
递归实现
Node* TurnToList_R() //搜索树转换为有序的双向链表 { cout << "递归" << endl; Node *Head = NULL; //头指针 Node *Tail = NULL; //尾指针 _TurnToList(_root, Tail); //找头结点 Head = _root; while (Head->_left) { Head = Head->_left; } return Head; } void _TurnToList(Node *&root, Node *&Tail) { if (root == NULL) return; Node *cur = root; if (cur->_left) _TurnToList(cur->_left, Tail); cur->_left = Tail; //使下一个节点和链表尾连接上 if (Tail != NULL) Tail->_right = cur; Tail = cur; //更新尾指针 if (cur->_right) _TurnToList(cur->_right, Tail); }
非递归
Node* TurnToList() { cout << "非递归" << endl; stack<Node*> s; Node *cur = _root; //遍历搜索树 Node *node = NULL; //当前节点 Node *tail = NULL; Node *head = NULL; while (cur || !s.empty()) { while (cur) { s.push(cur); cur = cur->_left; } if (!s.empty()) { node = s.top(); s.pop(); if (head == NULL) //设置头结点 { head = node; } node->_left = tail; if (tail) tail->_right = node; tail = node; cur = node->_right; } } tail->_right = NULL; return head;
0 0
- 将搜索二叉树转换成有序的双向链表
- 将搜索二叉树转成有序的双向链表
- 如何将搜索二叉树转换成有序双向链表
- 二叉搜索树转换成有序双向链表
- 微软面试100题---将 二叉搜索树 转化成 有序的双向链表
- 二叉搜索树转换成有序的双向循环链表(一)
- 360面试题——搜索二叉树转换成有序的双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 【二叉树】将二叉搜索树转换成一个排序的双向链表
- 二叉树--将二叉搜索树转换成一个排序的双向链表
- 给出一颗二叉搜索树,将它转换为有序的双向链表输出
- 面试题: 二叉搜索树转换成有序双向链表
- 将二叉查找树转换为有序的双向链表
- 输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
- 常见排序java实现
- Proximal Algorithms--proximal gradient algorithm
- 1093. Count PAT’s (25)-PAT甲级真题
- 慢启动
- 1100. Mars Numbers (20)-PAT甲级真题
- 将搜索二叉树转换成有序的双向链表
- 1002. A+B for Polynomials (25)-PAT甲级真题
- Nginx配置文件详细说明
- 哈希表
- 安卓刮刮乐效果demo
- Word Search
- poj2342 Anniversary party
- Same Tree
- C语言程序设计练习2(窗口服务指示系统3.5 )