二叉搜索树->双向有序链表,不能产生新的节点。
来源:互联网 发布:养老金认证软件个人版 编辑:程序博客网 时间:2024/06/14 16:56
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
总结:
1.中序遍历,等前面左子树“已经形成”一个好的链表了,再把根节点连上去。
2.深刻体会 ::已经形成 --》所以要采用先序遍历
3.深刻体会 . 要一个变量来记录当前递归中的状态时,该状态能被修改,要“传地址”而不是传值。传值只是形参被修改。
/*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) return NULL; TreeNode*plastNode=NULL; ConvertNode(pRootOfTree,&plastNode); TreeNode*head=plastNode; while(head->left) head=head->left; return head; } void ConvertNode(TreeNode*pRootOfTree,TreeNode**plastNode){ if(pRootOfTree==NULL) return; TreeNode* pCurrent=pRootOfTree; if(pCurrent->left) ConvertNode(pCurrent->left,plastNode); pCurrent->left=*plastNode; if(*plastNode) (*plastNode)->right=pCurrent; *plastNode=pCurrent;//如果是传值的话,这里被修改了,那么原值并没有变。 if(pCurrent->right) ConvertNode(pCurrent->right,plastNode); }};
0 0
- 二叉搜索树->双向有序链表,不能产生新的节点。
- 【剑指offer】二叉搜索树转换为有序双向链表。要求不创建新节点。只改变指向。
- 将搜索二叉树转成有序的双向链表
- 将一颗搜索树转换成一个排序的双向链表。要求不能创建任何新的节点
- 搜索二叉树转为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 从二叉搜索树创建双向有序链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树 转 有序双向链表
- 二叉搜索树转化为有序双向链表
- 二叉搜索树转换成有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转化为有序双向链表
- 二叉搜索树转有序双向链表
- 二叉搜索树转换成有序的双向循环链表(一)
- 给出一颗二叉搜索树,将它转换为有序的双向链表输出
- Ubuntu 16.04 apt-get搭建LAMP环境
- Codeforces Beta Round #1 A,B,C
- 计161--Problem H: 求三角形面积-gyy
- Linus中文件的Access\Modify\Change时间
- MongoDB文档翻译-Map Reduce与分片集合
- 二叉搜索树->双向有序链表,不能产生新的节点。
- 排序算法的时间复杂度和空间复杂度
- CSS选择器的优化
- vxworksbench
- (cf 219D Choosing Capital for Treeland) 树型DP + 常规
- 设计模式之策略模式
- stm32笔记--2硬件--GPIO管脚的几种工作模式
- Android利用DrawerLayout实现侧滑菜单
- Android内存泄漏分析经验记录