微软面试题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:(这个有新节点,用递归,见思路2)
中序遍历二叉树,指针pTree执行当前节点,pFomer指向前一节点,初始为NULL
对出栈节点的操作,p指向从栈顶弹出的节点
pTree->m_pLeft=pFormer;
pFormer->m_pRight=p;
pFomer=pTree;
算法:
1 View Code 2 BSTreeNode * BinTreeToLinkList(BSTreeNode* BT){ 3 Stack S; 4 BSTreeNode* pTree=BT; 5 BSTreeNode*list=NULL,*pFormer=NULL; 6 while(pTree!=NULL||!isEmptyStack(S)){ 7 if(pTree!=NULL){ 8 Push(S,pTree); 9 pTree=pTree->m_pLeft; 10 }else{ 11 pTree=Top(S); 12 if(list==NULL){ 13 list=pTree; 14 pFormer=pTree; 15 }else{ 16 pFormer->m_pRight=pTree; 17 pTree->m_pLeft=pFormer; 18 pFormer=pTree; 19 } 20 pTree=pTree->m_pRight; 21 Pop(S); 22 } 23 } 24 return list; 25 }
为了能够达到要求,只能用中序遍历递归算法了(我一般不用递归的)
基本思路2:和1一样,递归出来的结点顺序就是链表的顺序,往里面加就是了,同样需要list,pFormer
算法:
BintTree linkList=NULL;//全局变量BintTree pFormer=NULL;void BinTreeToLinkList(BitTree BT){if(BT!=NULL){BinTreeToLinkList(BT->lchild);if(linkList=NULL){linkList=BT;pFormer=BT;}else{pFomer->rchild=BT;BT->lchild=pFormer;pFormer=BT;}BinTreeToLinkList(BT->rchild);} }
转载于:https://www.cnblogs.com/GoAhead/archive/2012/05/24/2516473.html
微软面试题1、把二元查找树转变成排序的双向链表相关推荐
- 数据结构 - 把二元查找树转变成排序的双向链表(C++)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! //** ...
- 把二元查找树转变成排序的双向链表(树)
1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14 / \ / \ 4 8 ...
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表[数据结构]
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树 ...
- 把二元查找树转变成排序的双向链表
题目: 输入一颗二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 转换成双向链表4=6=8=10=12=14=16 首先,我们定义的二元查找树结点的数据 ...
- 转:把二元查找树转变成排序的双向链表
// 1:构造二叉查找树: // 2:中序遍历二叉查找树,因此结点按从小到大顺序访问,假设之前访问过的结点已经调整为一个双向链表,那么 // 只需要将当前结点连接至双向链表的最后一个结点即可,访问完后 ...
- 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...
- 程序员面试题精选100题(11)-求二元查找树的镜像[数据结构]
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成树的镜像转换. 例如输入: 8 / \ 6 1 ...
- 二元查找树变双向链表
声明:取自 "july"的"微软100题",加上一些个人理解,欢迎拍砖. 原文地址:http://blog.csdn.net/v_july_v/article/ ...
- 数据结构 - 二元查找树
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 二元查找 ...
最新文章
- P1131 [ZJOI2007]时态同步
- SSH中后台传到前台一个信息集合,tr td中怎么进行排列,类似在一个div里排列书籍...
- 目前成熟的计算机安全技术,计算机安全危害特点研究(共2389字).doc
- 下载和安装Nginx之添加Nginx作为系统服务(CentOS7为例)
- 阿捷外传之Git代码统计:DotNetCore + PowerBI 实现Git仓库日志分析
- parallels desktop 缺少组件_德国警方扣留光伏组件盗贼
- 运行时修改Standard shader的Mode
- 程序员问答网站:StackOverflow
- 分析CSS布局中BFC
- 网页视频地址批量抓取工具(原创)
- python实现神经网络梯度下降算法_python实现随机梯度下降(SGD)
- linux安装CAS认证服务器
- nomogram,列线图,因素
- java多线程下载美女图片
- JQuery 属性操作 - attr() 方法
- php输出熊猫图案,熊猫特殊符号
- view函数--python
- border设置1px看起来很粗问题
- 点名器——随机数的应用
- java 贪吃蛇 地狱模式_贪吃蛇大作战4.4.7版
热门文章
- 30万总奖金·垃圾分类挑战赛进入最后冲刺(附baseline完整分享)
- 科技部发文:破除“唯论文”不良导向!网友:靠水论文拿奖励的人不开心了...
- 免费使用3天!52CV GPU云大促,疫情期间做深度学习的首选!
- 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
- 【CV竞赛】百度车道线检测,正在报名中,8.9万元奖金
- 【Matplotlib】【Python】如何使用matplotlib绘制折现图
- ResNet到底深不深?
- OpenCV人脸识别之三:识别自己的脸
- mac 用户 文件夹 权限_WIN7局域网文件分权限共享设置方法
- wget 和 curl 区别