算法基础 - 二叉查找树变成有序双向链表
来源:互联网 发布:mac口红怎么样 编辑:程序博客网 时间:2024/06/05 09:55
自己今天真是笨死了,这么简单的题目,竟然在当场写代码的时候没有写出来。
这里写一下,其实这个题目非常简单,就是一个中序遍历,在中序遍历的时候,更改一下指针指向。自己在面试写的时候太紧张了,就蒙了。。。
下面贴一下代码实现:
TreeNode* inorderFlatTree(TreeNode * root){ stack<TreeNode *> st; TreeNode * temp = root; TreeNode * sw = NULL; while (temp != NULL || !st.empty()) { while (temp != NULL) { st.push(temp); temp = temp->left; } if (!st.empty()) { if (sw != NULL) { sw->right = st.top(); st.top()->left = sw; } cout<<st.top()->val<<endl; temp = st.top()->right; sw = st.top(); st.pop(); } } return sw;}
这样子返回的是链表的尾部,如果需要增序的话,用个while循环,把sw指向头结点就可以了。
while(sw != NULL){sw = sw->left;}
就这个样子。
递归实现
其实递归实现也非常简单,只用记录上一次的节点指针就行了。
void flatTree(TreeNode * root, TreeNode * head){ if (root == NULL) { return; } flatTree(root->left, head); if (head == NULL) { head = root; }else{ head->right = root; root->left = head; head = root; } flatTree(root->right, head);}
自己对代码掌控还是不够熟练的收放自如,还是需要不断的努力啊。
0 0
- 算法基础 - 二叉查找树变成有序双向链表
- 二叉查找树转变成有序的双向链表
- 二叉查找树转换为有序双向链表
- 二叉查找树转换为有序双向链表---微软
- 将二叉查找树变为有序的双向链表
- 二叉查找树变为有序的双向链表
- 有序二叉树转为有序双向链表
- 树(1)把二叉查找树转换成有序的双向链表
- 将二叉查找树转换为有序的双向链表
- [微软面试100题] 二元查找数变成有序的双向链表
- 二叉搜索树转为有序双向链表(递归算法与非递归算法)
- 关于把二元查找树变成排序的双向链表算法的理解
- 算法题1:二元查找树转换成有序双向链表
- 笔试面试算法经典--二叉搜索树转有序的双向链表(Java)
- 面试100题系列之1将查找二叉树转换成有序的双向链表
- 二叉查找树转为双向链表
- 二叉查找树转为双向链表
- 二叉查找树转双向链表
- C++加密库botan混合编译和简单使用
- Spark 数据ETL
- 增强for循环对于“二维”数组进行循环的案例
- Thread的suspend和stop方法的一些问题
- codeforces#348-C. Little Artem and Matrix-模拟
- 算法基础 - 二叉查找树变成有序双向链表
- firebug安装及其使用 视频【原创】
- codeforces#348-D - Little Artem and Dance-规律-模拟
- javascript入门基础小案例-----按键盘的方向键来控制块的移动z注释:
- Centos获取软件包
- 把数组排成最小的数
- javaScript基础
- 关于gitblit在window环境下的配置 (2)
- 逆置单链表,C++封装实现,经过测试。