声明:取自 ”july“的“微软100题“,加上一些个人理解,欢迎拍砖。

原文地址:http://blog.csdn.net/v_july_v/article/details/6126406


学习微软100题笔记:

1.二元查找树变双向链表:

#include <stdio.h>
#include <iostream>

struct BSTreeNode
{
    int m_nValue; 
    BSTreeNode *m_pLeft; 
    BSTreeNode *m_pRight; 
};

typedef BSTreeNode DoubleList;
DoubleList * pHead;
DoubleList * pListIndex;

void convertToDoubleList(BSTreeNode * pCurrent);

BSTreeNode* addBSTreeNode(BSTreeNode * & pCurrent, int value)
{
    if (NULL == pCurrent)
    {
        pCurrent = new BSTreeNode();
        pCurrent->m_pLeft = NULL;
        pCurrent->m_pRight = NULL;
        pCurrent->m_nValue = value;
    }
    else if( pCurrent->m_nValue > value )
    {
        pCurrent->m_pLeft = addBSTreeNode( pCurrent->m_pLeft, value );
}
else if ( pCurrent->m_nValue< value )
{
        pCurrent->m_pRight = addBSTreeNode(pCurrent->m_pRight, value);
}   
else
    {
std::cout<<"重复加入节点"<< std::endl;
    }

return pCurrent;
}

void ergodicBSTree( BSTreeNode *pCurrent )
{
if( NULL == pCurrent )
{
return;
}
if( NULL != pCurrent->m_pLeft )
{
ergodicBSTree( pCurrent->m_pLeft );

}

convertToDoubleList( pCurrent );

if( NULL != pCurrent->m_pRight )

{
ergodicBSTree( pCurrent->m_pRight );
}

}

void convertToDoubleList( BSTreeNode *pCurrent )
{
pCurrent->m_pLeft = pListIndex;
if( NULL != pListIndex )
{
pListIndex->m_pRight = pCurrent;
}
else
{
pHead = pCurrent;
}

pListIndex = pCurrent;

std::cout << pCurrent->m_nValue << std::endl;
}

int
main( void )
{
BSTreeNode *pRoot = NULL;
pListIndex = NULL;
pHead = NULL;
addBSTreeNode(pRoot, 10);
    addBSTreeNode(pRoot, 4);
    addBSTreeNode(pRoot, 6);
    addBSTreeNode(pRoot, 8);
    addBSTreeNode(pRoot, 12);
    addBSTreeNode(pRoot, 14);
    addBSTreeNode(pRoot, 15);
    addBSTreeNode(pRoot, 16);
    ergodicBSTree(pRoot);
    return 0;
}

其中建立二叉树时是按照 c语言程序设计中(K&R)方法建立的,大同小异。

重点是利用递归转换为链表的过程。

一个全局指针pListIndex指向pCurrent的前一个节点,每次调用convertToDoubleList完成

pCurrent->m_pRight -> pListIndex;因为这里pCurrent不为NULL,然后再pListIndex->m_pLift 指向当前pCurrent

要先判断pListIndex是否为NULL,因为pListIndex开始时是赋值为NULL的,不能进行解引用操作。

新手没经验,欢迎指正错误,待更新。详细请见开头原博文 ,july大神。

转载于:https://www.cnblogs.com/newbeeyu/p/5290723.html

二元查找树变双向链表相关推荐

  1. (三)二元查找树转换双向链表

    题意:不引入新节点,只允许指针操作,实现二元查找树转换为相应双向链表. 10 /    / 6    14 / /    /  / 4  8 12 16 转换成双向链表 4=6=8=10=12=14= ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. 输入一颗二元查找树,将该树转换为它的镜像

    题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点. 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 ...

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

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

最新文章

  1. 自动调试用于移动GPU的卷积网络
  2. maven 错误处理
  3. PMCAFF | 产品经理的招聘要求调研分析
  4. java错误:The superclass javax.servlet.http.HttpServlet was not found on the Java Bu
  5. SpringMVC的请求-文件上传-单文件上传的代码实现2
  6. Django-C001-快速入门
  7. 用Markdown写博客快速入门
  8. 计算几何 —— 二维几何基础 —— 三角形的面积
  9. Java中二维数组和面向对象
  10. cuda11.0 cudnn 11.0 torch1.7.1+cu110 torchvision 0.8.2+cu110 安装包
  11. mysql索引的创建和删除吗_MySQL索引的创建、删除和查看
  12. adapthisteq和histeq
  13. 10月| R社区原创作者免费赠书
  14. SLAM基础_从零开始一起学习SLAM | 为啥需要李群与李代数?
  15. HDU6287 口算训练 【两种优化版分解质因数】【二分下标】
  16. HDU 2191 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活
  17. 学习笔记(109):R语言入门基础-text函数
  18. 网络安全-古典加密算法之置换密码加解密算法
  19. HTML5:<abbr>元素
  20. 计算机组成原理-课设

热门文章

  1. Silverlight开发历程—(绘制矢量图之Polyline 和 Polygon)
  2. 阿里再添AI新物种,消费者天猫双11网上逛“视觉超市”
  3. Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑
  4. 《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》
  5. 点击文字弹出一个DIV层窗口代码
  6. delphi 使用UDP收发数据
  7. Socket2实现tcp端口扫描
  8. android graphic:canvas
  9. hdu 3449 Consumer 01背包
  10. FCKEditor最新上传漏洞(ASP),允许上传“.asp;jpg”类型文件解决方案