【面试题】把二元查找树转变成排序的双向链表

高杂合度基因组组装实战:Hifiasm参数调优与purge_dups过滤效果对比(附猪毛菜案例) 本文深入探讨了高杂合度基因组组装中Hifiasm参数调优与purge_dups过滤的实战效果对比,通过猪毛菜案例详细解析了两种方法的适用场景与优化策略。文章重点分析了purge_dups在contig过滤中的显著效果,为基因组组装提供了关键的技术参考。 阅读详情

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

  比如将二元查找树
                                            10
                                          /    \
                                        6      14
                                      /  \     /  \
                                   4     8  12 16
转换成双向链表
4=6=8=10=12=14=16。
定义二元查找树结点的数据结构如下:
    struct BSTreeNode // a node in the binary search tree
    {
        int        m_nValue; // value of node
        BSTreeNode *m_pLeft; // left child of node
        BSTreeNode *m_pRight; // right child of node
    };

分析与解答:可以中序遍历整棵树。按照这个方式遍历树,比较小的结点先访问。如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表,我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后,整棵树也就转换成一个排序双向链表了。
  代码如下:
/* 建立二叉排序树 */
void addBSTreeNode(BSTreeNode *&pCurrent,int value)//在这个函数中会要改变指针值,一定要记得使用引用传递 
{ 
    if (pCurrent==NULL) 
    { 
        BSTreeNode* pBSTree=new BSTreeNode(); 
        pBSTree->m_nValue=value; 
        pBSTree->m_pLeft=NULL; 
        pBSTree->m_pRight=NULL; 
        pCurrent=pBSTree; 
    } 
    else if (pCurrent->m_nValue<value) 
    { 
        addBSTreeNode(pCurrent->m_pRight,value); 
    } 
    else if (pCurrent->m_nValue>value) 
    { 
        addBSTreeNode(pCurrent->m_pLeft,value); 
    } 
    else
    { 
        cout<<"重复节点"<<endl; 
    } 
 
}
/*将一颗二叉搜索树转换成一个双向链表*/
//pNode:当前节点,即子二叉树的根节点
//pLastNodeInList:双向链表中的最后一个节点
void convertToDoubleList(BSTreeNode* pNode, BSTreeNode*& pLastNodeInList)
{
         if(pNode == NULL)
            return;
		  BSTreeNode *pCurrent = pNode;
         /*转换左子树*/
		  if (pCurrent->m_pLeft != NULL)
            convertToDoubleList(pCurrent->m_pLeft, pLastNodeInList);
		   // 把当前节点放入双向链表中
		   pCurrent->m_pLeft = pLastNodeInList;//设置当前节点的左指针
		    
		   if(pLastNodeInList != NULL)
            pLastNodeInList->m_pRight = pCurrent;

            pLastNodeInList=pCurrent;
			// 转换右子树
         if (pCurrent->m_pRight != NULL)
            convertToDoubleList(pCurrent->m_pRight, pLastNodeInList);
}
//
BSTreeNode* Convert(BSTreeNode* pHeadOfTree)
{
      BSTreeNode *pLastNodeInList = NULL;//双链表最后一个节点
      convertToDoubleList(pHeadOfTree, pLastNodeInList);
           // 获取双向链表的头节点
      BSTreeNode *pHeadOfList = pLastNodeInList;
      while(pHeadOfList && pHeadOfList->m_pLeft)
            pHeadOfList = pHeadOfList->m_pLeft;

      return pHeadOfList; //返回双向链表的头节点

}


int main()
{
	/****创建二叉查找树****/
    BSTreeNode *pRoot=NULL; 
    addBSTreeNode(pRoot,10); 
    addBSTreeNode(pRoot,6); 
    addBSTreeNode(pRoot,14); 
    addBSTreeNode(pRoot,4); 
    addBSTreeNode(pRoot,8); 
    addBSTreeNode(pRoot,12); 
    addBSTreeNode(pRoot,16); 
	/***************转换为双向链表*******************/
 BSTreeNode *pHeadOfList=Convert(pRoot);
/**********************输出双向链表******************/
  while(pHeadOfList!=NULL)
	 {
	  cout<<pHeadOfList->m_nValue<<"->";
       pHeadOfList=pHeadOfList->m_pRight;
  }

  return 0;
}


硬方案——几种实用的恒流源电路设计方案,敬请收藏(运放、三极管在手,让你玩出多种花样) 0 引言 我们在信号测量、供电等应用场景时常会涉及到使用恒流源,以前觉得恒流源挺神奇的,研究了下实现方案,其实也没有多么高深(这里讨论的仅限于用在信号测量中的小电流恒流源设计),这里给出几个实用的恒流源电路设计方案。 1 恒流源电路设计 (1)使用三极管搭建的恒流源 (2)使用运放搭建的恒流源 (3)使用恒流二极管搭建的恒流源 pt100恒流源测温电路图_电子技术_电工之家 ... 阅读详情

相关推荐

微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

结果几个接口,最终获得到到一直包含调起微信客户端的支付链接 但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置a.rel = "noreferrer"; <body> <a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a&...

qq_31683775的博客 4万+

1. 微软面试题:把二元查找树转变成排序的双向链表(树)

微软面试题集100题之1:把二元查找树转变成排序的双向链表(树)

我的技术生活 1796

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码)

本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。

weixin_27032989的博客 598

算法与数据结构面试题(1)-把二元查找树转变成排序的双向链表

学习网址:http://blog.youkuaiyun.com/v_july_v/article/details/5934051 题目 1.把二元查找树转变成排序的双向链表  题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。      10   / /  6 14  / / / / 4 8

doctorq 1592

SAP Workflow审批功能实例详细过程

SAP Workflow审批功能实例详细过程

陈送平的博客 6566

手把手教你用VM实现欧姆龙PLC数据采集(含Fins协议配置详解)

本文详细介绍了如何使用VM(VisionMaster)实现与欧姆龙PLC的数据采集,重点解析了Fins协议(包括Fins TCP/UDP)的配置步骤。从网络环境搭建、PLC的IP地址设置,到VM端Fins通讯通道的详细配置与数据点映射,提供了完整的实战指南。文章还涵盖了数据收发解析、常见问题排查清单,帮助工程师快速完成视觉系统与PLC的稳定集成。

weixin_29171087的博客 189

微软编程题-把二元查找树变成排序的双向链表

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的节点,只调整指针的指向。转换成 4=6=8=12=14=16#include <stdio.h> #include <iostream> using namespace std;struct BSTreeNode{ int m_nValue; BSTreeNode *m_pLeft; BST

吾尝终日而思矣,不如须臾之所学也 706

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 382

微软面试题——把二元查找树转变成排序的双向链表

题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的节点,只调整指针的指向。   解题原理: 节点10的左指针应该指向其左子树值最大的节点8,节点8的右指针应该指向节点10,节点10的右指针应该指向其右子树的最小节点12,节点12的左指针应该指向节点10。 因此采用需找pCurrent节点左子树的最大节点leftMaxNode,其右子树的最小节点ri

angelina525的专栏 720

TPAMI 2024 | MO-MIX:基于深度强化学习的多目标多智能体协同决策

深度强化学习(RL)已被广泛应用于解决复杂的决策问题。在许多现实世界的场景中,任务通常有多个相互冲突的目标,并且可能需要多个智能体进行合作,这些是多目标多智能体决策问题。然而,在这个交叉领域的研究工作还相对较少。现有的方法仅限于单独的领域,并且只能处理具有单一目标的多智能体决策,或者具有单一智能体的多目标决策。在本文中,我们提出了MO-MIX来解决多目标多智能体强化学习(MOMARL)问题。我们的方法基于集中训练与分散执行(CTDE)框架。

小白学视觉 1128

学Simulink——控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。

xiaoheshang_123的博客 528

【微软100面试题实现】第01题:把二元查找树转变成排序的双向链表

微软100面试题实现:第01题 题源自:http://topic.youkuaiyun.com/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \

每天进步一点点 721

ue 打包linux程序 在windows系统 2026

ue 打包linux程序 在windows系统 2026

jacke121的专栏 370

面试题:把二元查找树转变成排序的双向链表

输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BS

sd6264456的专栏 606

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

程序员面试题精选(1):把二元查找树转变成排序的双向链表

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

yysdsyl的专栏 5603

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

把二元查找树转变成排序的双向链表(微软面试题)

参考了July的博客,然后自己动手实现了一线,留着备忘吧!

明天,你又将身在何方…… 840

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

微软面试题1.把二元查找树转变成排序的双向链表

1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { int m_nVa...

码农 196

微软面试题1、把二元查找树转变成排序的双向链表

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / /6 14/ / / /4 8 12 16转换成双向链表4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下:struct BSTreeNode{ int m_nValue; // value of node BSTr...

weixin_30387423的博客 120

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

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

落日小屋 1102

微软面试题系列(一):把二元查找树转变成排序的双向链表

    一网友对算法感兴趣,不知怎么得到了我的QQ号,加为好友。给我发来了微软面试题100题,让我做一做。我也正好想准备年底找工作的事儿,一举两得,就试试上面题目的难度。     第一道题是把二元查找树转变成排序的双向链表。一开始做这些题,困难还真不少,遇到的第一个问题就是:什么是二元查找树?     二元查找树: 它首先要是一棵二元树,在这基础上它或者是一棵空树;或者是具有下列性质的二元树:...

weixin_33696106的博客 117

程序员面试题精选(01)-把二元查找树转变成排序的双向链表

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

SURE 469

程序员面试题精选(01) 把二元查找树转变成排序的双向链表

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

乐在其中/Leo在其中 155

程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表

程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表 参见博客: http://zhedahht.blog.163.com/blog/static/254111742007127104759245/ http://www.cnblogs.com/caidaxia/archive/2011/10/14/2212369.html 题目: 输入一棵二元查找

chenglinhust的专栏 1159

程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表—python实现

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

会编程的大白熊 2331
上一篇: 【编程之美】读书笔记:寻找数组中的最大值和最小值
下一篇: 【面试题】在二元树中找出和为某一值的所有路径
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值