第一题(二元查找树转变成排序的双向链表)
来源:互联网 发布:如何登录淘宝店铺 编辑:程序博客网 时间:2024/06/02 13:34
1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树节点的数据结构如下:
struct BSTreeNode{<span style="white-space:pre"></span>int m_nValue; // value of node<span style="white-space:pre"></span>BSTreeNode *m_pLeft; // left child of node<span style="white-space:pre"></span>BSTreeNode *m_pRight; // right child of node};方法一:
根据二叉查找树的性质,采用中序遍历二叉查找树的方式遍历到的节点元素有序,程序采用递归实现,我们可以使用变量current和lastNode记录当前节点和上一个遍历到的节点,通过引用传参的方式将当前节点赋给调用遍历下一个节点函数的形参lastNode,在函数内部将current连接到lastNode的后面形成双向链表。
C++代码:
namespace MS100P_1{struct BSTreeNode{int m_nValue; // value of nodeBSTreeNode *m_pLeft; // left child of nodeBSTreeNode *m_pRight; // right child of node};void convert(BSTreeNode* root, BSTreeNode* &lastNode){if (root == NULL)return;BSTreeNode* current = root;if (root->m_pLeft != NULL)convert(root->m_pLeft, lastNode);if (lastNode != NULL)lastNode->m_pRight = current;current->m_pLeft = lastNode;lastNode = current;if (root->m_pRight != NULL)convert(root->m_pRight, current);}BSTreeNode *Solution(BSTreeNode *head){BSTreeNode *lastNode = NULL;convert(head, lastNode);BSTreeNode *listHead = lastNode;while (listHead != NULL&&listHead->m_pLeft != NULL)listHead = listHead->m_pLeft;return listHead;}}
0 0
- 第一题(二元查找树转变成排序的双向链表)
- 微软面试100题 第一题 把二元查找树转变成排序的双向链表
- 微软100题-第一题把二元查找树转变成排序的双向链表
- 第一题:把二元查找树转变成排序的双向链表
- 第一题 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 1.二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- .把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 在主线程上
- 数据库系统概论——求最小函数依赖集
- ubuntu/linux mint 创建proc文件的三种方法(一)
- 下一步学习目标
- 下:下载某个文档,单独一个字时控制微我向下10px,后面加数字时控制微我向下多少像素 20140709
- 第一题(二元查找树转变成排序的双向链表)
- 东软实训(九)
- 二维数组、字符串互相转换
- python字符串乱码问题
- SQL中索引的原理
- 用ruby打印杨辉三角
- 2010 Asia Fuzhou Regional Contest HDOJ 3694 Fermat Point in Quadrangle
- [学习笔记]C和C++中指针的基础知识点(一)
- ubuntu/linux mint 创建proc文件的三种方法(二)