题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
   
  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、把二元查找树转变成排序的双向链表相关推荐

  1. 数据结构 - 把二元查找树转变成排序的双向链表(C++)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! //** ...

  2. 把二元查找树转变成排序的双向链表(树)

    1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14 / \ / \ 4 8 ...

  3. 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表[数据结构]

    题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树                                     ...

  4. 把二元查找树转变成排序的双向链表

    题目: 输入一颗二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 转换成双向链表4=6=8=10=12=14=16 首先,我们定义的二元查找树结点的数据 ...

  5. 转:把二元查找树转变成排序的双向链表

    // 1:构造二叉查找树: // 2:中序遍历二叉查找树,因此结点按从小到大顺序访问,假设之前访问过的结点已经调整为一个双向链表,那么 // 只需要将当前结点连接至双向链表的最后一个结点即可,访问完后 ...

  6. 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8   ...

  7. 程序员面试题精选100题(11)-求二元查找树的镜像[数据结构]

    题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成树的镜像转换. 例如输入: 8     /  \   6      1 ...

  8. 二元查找树变双向链表

    声明:取自 "july"的"微软100题",加上一些个人理解,欢迎拍砖. 原文地址:http://blog.csdn.net/v_july_v/article/ ...

  9. 数据结构 - 二元查找树

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 二元查找 ...

最新文章

  1. P1131 [ZJOI2007]时态同步
  2. SSH中后台传到前台一个信息集合,tr td中怎么进行排列,类似在一个div里排列书籍...
  3. 目前成熟的计算机安全技术,计算机安全危害特点研究(共2389字).doc
  4. 下载和安装Nginx之添加Nginx作为系统服务(CentOS7为例)
  5. 阿捷外传之Git代码统计:DotNetCore + PowerBI 实现Git仓库日志分析
  6. parallels desktop 缺少组件_德国警方扣留光伏组件盗贼
  7. 运行时修改Standard shader的Mode
  8. 程序员问答网站:StackOverflow
  9. 分析CSS布局中BFC
  10. 网页视频地址批量抓取工具(原创)
  11. python实现神经网络梯度下降算法_python实现随机梯度下降(SGD)
  12. linux安装CAS认证服务器
  13. nomogram,列线图,因素
  14. java多线程下载美女图片
  15. JQuery 属性操作 - attr() 方法
  16. php输出熊猫图案,熊猫特殊符号
  17. view函数--python
  18. border设置1px看起来很粗问题
  19. 点名器——随机数的应用
  20. java 贪吃蛇 地狱模式_贪吃蛇大作战4.4.7版

热门文章

  1. 30万总奖金·垃圾分类挑战赛进入最后冲刺(附baseline完整分享)
  2. 科技部发文:破除“唯论文”不良导向!网友:靠水论文拿奖励的人不开心了...
  3. 免费使用3天!52CV GPU云大促,疫情期间做深度学习的首选!
  4. 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
  5. 【CV竞赛】百度车道线检测,正在报名中,8.9万元奖金
  6. 【Matplotlib】【Python】如何使用matplotlib绘制折现图
  7. ResNet到底深不深?
  8. OpenCV人脸识别之三:识别自己的脸
  9. mac 用户 文件夹 权限_WIN7局域网文件分权限共享设置方法
  10. wget 和 curl 区别