面试题27:二叉搜索树转换为有序双向链表
来源:互联网 发布:淘宝 访问受限 编辑:程序博客网 时间:2024/05/21 15:01
题目:输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。
思路:设置一个指针,用来指向链表的尾结点,初始化为NULL,中序遍历二叉树,先遍历左子树,找到第一个结点,它的左结点为空,将这个结点的左结点指针指向链表的尾结点,将链表尾结点的右指针指向当前结点,修改尾结点指针让它继续指向尾结点,然后判断它的右结点。
#include <iostream>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode * m_pLeft; BinaryTreeNode * m_pRight;}; BinaryTreeNode * Convert(BinaryTreeNode * pRoot){//链表的尾指针BinaryTreeNode * pLastNodeOfList=NULL;ConvertNode(pRoot,&pLastNodeOfList);//寻找头结点BinaryTreeNode * pHead=pLastNodeOfList;while(pHead!=NULL&&pHead->m_pLeft!=NULL){pHead=pHead->m_pLeft;}return pHead;}void ConvertNode(BinaryTreeNode * pNode,BinaryTreeNode * * pLastNodeOfList){if(pNode==NULL)return;BinaryTreeNode * pCurrentNode=pNode;//当前结点//遍历左子树if(pCurrentNode->m_pLeft!=NULL){ConvertNode(pCurrentNode->m_pLeft,pLastNodeOfList);}//将当前结点的左结点指向链表的尾结点pCurrentNode->m_pLeft=*pLastNodeOfList;//如果链表尾结点不为空,将尾结点的右指针指向当前结点if(*pLastNodeOfList!=NULL){(*pLastNodeOfList)->m_pRight=pCurrentNode;}//将当前结点设为尾结点*pLastNodeOfList=pCurrentNode;//遍历右子树if(pCurrentNode->m_pRight!=NULL){ConvertNode(pCurrentNode->m_pRight,pLastNodeOfList);}}
0 0
- 面试题27:二叉搜索树转换为有序双向链表
- 360面试题——搜索二叉树转换成有序的双向链表
- 面试题: 二叉搜索树转换成有序双向链表
- 剑指offer 面试题27 二叉搜索树转换为排序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 【面试题】二叉搜索树转换双向链表
- 面试题27:二叉搜索树按中序遍历原地转换为双向链表
- 《剑指Offer》面试题:二叉搜索树转换为双向链表
- 【IT笔试面试题整理】二叉搜索树转换为双向链表
- 面试题27:二叉搜索树与双向链表转换
- 【面试题】剑指Offer-27-将二叉搜索树转换成排序的双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 使用 AngularJS & NodeJS 实现基于 token 的认证应用
- webbench学习
- C语言字符串函数大全
- 时间日期类
- CInternetSessio和CFtpConnection连接FTP
- 面试题27:二叉搜索树转换为有序双向链表
- 第十三周 项目1-动物这样叫(2)
- Java基础—线程间通信
- 01背包问题和完全背包问题
- 求虐,我还想再拓展一次
- 黑马程序员-Java常见API案例小结III(正则表达式 )
- Guava ---- Maps
- div自动居中
- JS实现返回页面顶部