数据结构、算法面试系列【1】
来源:互联网 发布:人工智能的原理及应用 编辑:程序博客网 时间:2024/06/03 01:13
1、把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。
10/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
解题思路:
1、理解二元查找树:
二元查找树: 它首先要是一棵二元树,在这基础上它或者是一棵空树;或者是具有下列性质的二元树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二元查找树
2、理解了二元查找树的定义,转换为排序的双向链表就是 中序遍历二元查找树
code:
#include <stdio.h>#include <iostream>using namespace std;//二元查找树节点数据结构struct BSTreeNode{ int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node BSTreeNode *m_pRight; // right child of node};BSTreeNode *pHead;//链表头指针BSTreeNode *pListCur;//链表尾指针void convertDoubleList(BSTreeNode *pCur);//创建二元查找树void addBSTree(BSTreeNode *&pRoot,int value){ if(pRoot==NULL) { BSTreeNode *pBSTree=new BSTreeNode(); pBSTree->m_pLeft=NULL; pBSTree->m_pRight=NULL; pBSTree->m_nValue=value; pRoot=pBSTree; }else { if((pRoot->m_nValue)>value) { addBSTree(pRoot->m_pLeft,value);//插入到左子树 }else if((pRoot->m_nValue)<value) { addBSTree(pRoot->m_pRight,value);//插入到右子树 }else { //已经存在节点 } }}//中序遍历void inTraversalBSTree(BSTreeNode * pCur){ if(pCur==NULL) { return; } if( (pCur->m_pLeft) != NULL) { inTraversalBSTree(pCur->m_pLeft); } convertDoubleList(pCur);//将节点插入链表尾部 if((pCur->m_pRight)!=NULL) { inTraversalBSTree(pCur->m_pRight); }}//将节点插入链表尾部void convertDoubleList(BSTreeNode *pCur){ pCur->m_pLeft=pListCur; if(pListCur!=NULL) { pListCur->m_pRight=pCur; }else { pHead=pCur; } pListCur=pCur; cout<<pCur->m_nValue<<endl;}int main(){ pHead=pListCur=NULL; BSTreeNode *pRoot=NULL; addBSTree(pRoot,10); addBSTree(pRoot,4); addBSTree(pRoot,6); addBSTree(pRoot,8); addBSTree(pRoot,12); addBSTree(pRoot,14); addBSTree(pRoot,15); addBSTree(pRoot,16); inTraversalBSTree(pRoot); return 0;}
申明:题目来自http://blog.csdn.net/v_JULY_v 。
- 数据结构、算法面试系列【1】
- 算法系列(1)-数据结构
- 名企笔试面试数据结构+算法题系列
- 面试 数据结构 算法
- 微软数据结构算法 面试
- 数据结构 算法 编程 面试
- Java数据结构和算法系列1--链表
- 数据结构与算法系列
- 算法与数据结构系列
- 关于本微软等公司数据结构+算法面试100题系列的郑重声明
- 微软等公司数据结构+算法面试100题系列(61——100题)
- 数据结构和算法面试总结
- 数据结构与算法面试总结
- 算法-数据结构面试100题
- 数据结构和算法面试总结
- 数据结构与算法面试总结
- 【面试笔试】数据结构与算法
- 面试常考数据结构算法
- Kettle连接Mysql数据库异常
- 设置eclipse工作区背景色
- 2013-10-12 推荐 江苏吴中【仅供参考,投资需谨慎,自行负责】
- 去除Dialog边框
- 安装ia32-libs
- 数据结构、算法面试系列【1】
- CoCos2D-X-2.1.5中使用Cygwin创建新项目,并在Eclipse中编译通过
- MapReduce中InputFormat和InputSplit解读
- 获取页面高度和可见高度
- s标签 在页面上对Double进行没有小数点操作
- 读入键盘变量的Shell脚本示例
- 从一个程序学习一点try-finally-return
- VS2008中添加程序启动画面 splash screen
- WPF的动画实现方式