将二叉搜索树转换成一个排序的双向链表--中序线索化的变型。
来源:互联网 发布:卡在windows启动界面 编辑:程序博客网 时间:2024/05/16 07:22
将二叉搜索树转换成一个排序的双向链表。
注意:要求不能创建任何新的结点,只能调整树中结点指针的指向,也就是left当prev,right当next。
在二叉搜索树中,每个结点都有两个分别指向其左、右子树的指针,左子树结点的值总是小于父结点的值,右子树结点的值总是大于父结点的值。在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个结点。所以这两种数据结构的结点是一致,二叉搜索树和双向链表,只是因为两个指针的指向不同而已,完全可以通过改变其指针的指向来实现二者的转换。
思路:
找到二叉搜索树中左子树的最右边的节点,使其与根节点连成双向关系
找到二叉搜索树中右子树的最左边的节点,使其与根节点连成双向关系
struct serchTreeNode{ serchTreeNode(int data) :_data(data) , pLeft(NULL) , pRight(NULL) {} int _data; serchTreeNode* pLeft; serchTreeNode* pRight;};serchTreeNode* serchTreeToList(serchTreeNode* pRoot){ //空树 if (pRoot == NULL) return NULL; //二叉搜索树只有根节点 if (pRoot->pLeft == NULL&&pRoot->pRight == NULL) return pRoot; serchTreeNode* pLeftRoot = serchTreeToList(pRoot->pLeft);//转换左子树 serchTreeNode* pLeftNode = pLeftRoot; while (pLeftNode != NULL&&pLeftNode->pRight != NULL)//找到左子树的最右边的节点(左子树中最大) { pLeftNode = pLeftNode->pRight; } //如果左子树链表存在,则将根节点与左子树最右节点连成双向关系 if (pLeftRoot) { pLeftNode->pRight = pRoot; pRoot->pLeft = pLeftNode; } serchTreeNode* pRightRoot = serchTreeToList(pRoot->pRight);//转换右子树 serchTreeNode* pRightNode = pRightRoot; while (pRightNode!=NULL&&pRightNode->pLeft!=NULL)//找到右子树最左边的节点(右子树中最小) { pRightNode = pRightNode->pLeft; } //如果右子树链表存在,则将根节点与右子树最左节点连成双向关系 if (pRightRoot) { pRightNode->pLeft = pRoot; pRoot->pRight = pRightNode; } if (pLeftRoot) return pLeftRoot; else return pRightRoot;}
阅读全文
0 0
- 将二叉搜索树转换成一个排序的双向链表--中序线索化的变型。
- 【二叉树】将二叉搜索树转换成一个排序的双向链表
- 二叉树--将二叉搜索树转换成一个排序的双向链表
- 剑指offer27---将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- day17之将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 数据结构:将二叉搜索树转换成一个排序的双向链表
- 输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
- 二叉搜索树转化为排序双向链表。可以使用中序线索化的方法去进行,在这里需要注意的是我们需要一个记录前一个访问节点的结点。 二叉搜索树转换前: 转换后: 思路:如果根节点的左子树存在,则一直去访
- 题目:将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 将二叉搜索树转换成排序的双向链表
- 【面试题】剑指Offer-27-将二叉搜索树转换成排序的双向链表
- 将二叉搜索树转换成一个排序双向链表
- @RequiresPermissions 在controller上不起作用
- MOOC清华《程序设计基础》第7章:读文件操作
- 一个让人灵光一闪的数组C++类Array设计,可以此作为范本进行其他的C++类编写
- shell脚本
- JAVA中ListIterator和Iterator详解与辨析
- 将二叉搜索树转换成一个排序的双向链表--中序线索化的变型。
- Spring Cloud微服务(1)之 Spring Boot
- 正则表达式
- 实例探索Java模式之路——策略模式
- people are able to buy the same products anywhere in the world
- 复合井盖功能越来越多样化
- asp完整显示数据代码
- 使用util命名空间定义集合
- LVS同步连接状态信息(IPVS Connection Synchronization)