博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树与双向链表的转换
阅读量:6177 次
发布时间:2019-06-21

本文共 1382 字,大约阅读时间需要 4 分钟。

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
 
分析:二叉搜索树要转成有序的链表,可以想到的是利用中序遍历二叉树,每得到一个输出结点就修改其指针指向,从而构成有序链表。
 
题解:
/*struct TreeNode {	int val;	struct TreeNode *left;	struct TreeNode *right;	TreeNode(int x) :			val(x), left(NULL), right(NULL) {	}};*/class Solution {public:    TreeNode* Convert(TreeNode* pRootOfTree)    {        if(pRootOfTree == nullptr)    return nullptr;        // 非递归算法,故用堆栈        stack
sck; TreeNode *pCur = pRootOfTree; TreeNode *pNode = nullptr; // 存储前一个输出结点 TreeNode *pHead = nullptr; // 存储有序链表表头 while(!sck.empty() || pCur != nullptr) { while(pCur != nullptr) { sck.push(pCur); pCur = pCur->left; } pCur = sck.top(); // 处理输出结点 if(pNode != nullptr) { pNode->right = sck.top(); sck.top()->left = pNode; pNode = sck.top(); } if(pNode == nullptr) { pNode = sck.top(); pHead = pNode; } pNode = sck.top(); sck.pop(); if(pCur->right) { pCur = pCur->right; } else { pCur = nullptr; } } return pHead; }};

  

转载于:https://www.cnblogs.com/xzxl/p/9611161.html

你可能感兴趣的文章
数据结构---->图的遍历
查看>>
IronPython for ASP.NET 部署注意事项
查看>>
瑞典皇家理工学院工程实例:Sub-band Mixed Excitation LPC Vocoder In IP TELEPHONY
查看>>
勿忘我
查看>>
urlencode用法与误区
查看>>
发布和订阅的删除
查看>>
packets
查看>>
使用SVN提示“工作副本已经锁定”的解决办法
查看>>
关于索引删除的策略IndexDeletionPolicy
查看>>
【Tesseract-OCR】在VS2012环境下调用API方法---注意避免名字冲突
查看>>
用C#.NET实现电子邮件客户程序
查看>>
【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!
查看>>
微信连Wi-Fi专业设备列表
查看>>
介绍ASP.NET MVC4
查看>>
INSERT INTO .. ON DUPLICATE KEY更新多行记录
查看>>
Android 如何制作九宫格图片(.9.png)
查看>>
Linux系统的快速启动机制(内核切换) 【转】
查看>>
模板缓冲与阴影体 【转】
查看>>
PAT-B 1015. 德才论(同PAT 1062. Talent and Virtue)
查看>>
sql 简单事务例子
查看>>