剑指offer面试题-二叉搜索树转换成一个排序的双向链表

来源:互联网 发布:python griddata 编辑:程序博客网 时间:2024/06/01 10:35
  • 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表,要求不能创建任何新的结点,只能调整树中节点的指向,树的结点定义如下:
struct BinaryTreeNode{    BinaryTreeNode(char data)    :_pLeft(NULL)    , _pRight(NULL)    , _data(data)    {}    BinaryTreeNode *_pLeft;    BinaryTreeNode *_pRight;    char _data;};

例图:
这里写图片描述
思路:由于二叉搜索树是排序的数据结构,左子节点的值总是小于父节点的值,右子节点的值总是大于父节点的值,,因此我们可以中序遍历树中的每一个节点,遍历到根时根据排序链表的定义,将跟的左指针域与左子节点中最大的链接起来,右指针域与右子节点的最小的链接起来。
这里写图片描述
实现代码:

BinaryTreeNode *TreetoList(BinaryTreeNode *pRoot, BinaryTreeNode *&pPre){    if (NULL == pRoot)        return NULL;    TreetoList(pRoot->_pLeft,pPre);    if (pRoot)        pRoot->_pLeft = pPre;    if (pPre)        pPre->_pRight = pRoot;        pPre = pRoot;    TreetoList(pRoot->_pRight,pPre);    return pRoot;}
阅读全文
0 0