LeetCode: Flatten Binary Tree to Linked List
来源:互联网 发布:工商银行纸黄金软件 编辑:程序博客网 时间:2024/06/03 13:56
五一放假,宅在机房。昨天想换换思维,于是到LeetCode上随便找了一题:《Flatten Binary Tree to Linked List》。很久没做过Binary Tree的题目了,有点陌生,耗时比较久。
原题如下:
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
The flattened tree should look like:
我想了挺久,没什么头绪。一开始都没搞清这个是怎么个Flatten的,我参考了一下别人的code。我的code如下:
class Solution{public: void flatten(TreeNode* root){ if(root == NULL) //判断根节点是否为空,若为空,直接return return; //此处定义两个TreeNode,作为遍历的指针 TreeNode *cur = root;//将根节点赋予当前节点,马上作为遍历的开始 TreeNode *last ==NULL; while(cur != NULL)//判断当前父节点是否为空 { if(cur->left != NULL) { last = cur->right; while(last != NULL) last = last->right;//这句话的意思是遍历到左子树的最右边的叶子节点 //当遍历到左子树的最右边的一个节点时,将整个左子树移接到右子树上 last->right = cur->right; cur->right = cur->left; // 别忘了要将左子树置为NULL cur->left = NULL; } //将“根节点“移向右节点,作为下一个“根节点“,重新遍历左子树,将左子树的最右边的叶子节点连接到当前“根节点“的右节点 cur = cur->right; } }}
画一张图,就很明白上面要做的事情了,注意我画的图中箭头的指向:
这种方法通俗简单,但runtime比较长,LeetCode上显示我的runtime拍的很后很后=_=…如下
我Google了一下,在这篇博客上还看到一种递归的方法。我依稀记得处理Binary Tree的问题,递归是一种很重要的方法。于是把这个方法也看了一下:
public void flatten(TreeNode root) { ArrayList<TreeNode> pre = new ArrayList<TreeNode>(); pre.add(null); helper(root, pre);}private void helper(TreeNode root, ArrayList<TreeNode> pre){ if(root == null) return; TreeNode right = root.right; if(pre.get(0)!=null) { pre.get(0).left = null; pre.get(0).right = root; } pre.set(0,root); helper(root.left, pre); helper(right, pre);}
0 0
- LeetCode: Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- LeetCode: Flatten Binary Tree to Linked List
- [Leetcode] Flatten Binary Tree to Linked List
- [LeetCode] Flatten Binary Tree to Linked List
- Leetcode: Flatten Binary Tree to Linked List
- leetcode Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- 【leetcode】Flatten Binary Tree to Linked List
- [LeetCode]Flatten Binary Tree to Linked List
- [Leetcode]Flatten Binary Tree to Linked List
- [leetcode]Flatten Binary Tree to Linked List
- LeetCode-Flatten Binary Tree to Linked List
- [leetcode] Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- LeetCode:Flatten Binary Tree to Linked List
- [LeetCode] Flatten Binary Tree to Linked List
- 并查集
- HDU-ACM2091
- STM32_USART
- Android获取安装软件列表并启动某个app
- 归并排序
- LeetCode: Flatten Binary Tree to Linked List
- xib起冲突 StartTag: invalid element name
- Ubuntu Android 开发(一) JDK 安装
- HDU-ACM2092
- 最新mysql5.7.12 win64 安装及配置
- 基础知识之在浏览器中输入网址之后发生了什么
- 转载的文章, 工作中最全最常用的正则表达式
- java学习--冒泡排序
- ElasticSearch权威指南