Leetcode_flatten-binary-tree-to-linked-list
来源:互联网 发布:西方古典音乐入门 知乎 编辑:程序博客网 时间:2024/06/06 02:51
//http://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
click to show hints.
思路:题目说的是二叉树,看二叉树定义。二叉树或者是结点个数为0的空树,或者是结点个数有限的结点集合,结点中有一个根结点,根结点有两颗不相交的二叉树子树,分别称为左子树和右子树。
二叉树的定义本身就是递归的。题目是二叉树不是二分查找树。第一感觉是前序遍历。后来看了hints,果然是前序遍历。
但是,题目要求是in place, in place 要求是空间复杂度是O(1), 严格说用递归的话空间复杂度就不是O(1)了,应该是O(logN), 但是额外空间应该可以说是O(1).
参考代码:C++ 额外空间O(N)
/*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {public: vector<TreeNode*> vec; void pretraverse(TreeNode*p) { if(p) { vec.push_back(p); pretraverse(p->left); pretraverse(p->right); } return; } void flatten(TreeNode *root) { if(root) { vec.clear(); pretraverse(root); TreeNode* p = root; p->left = NULL; for(int i = 1; i < vec.size(); ++i) { p->right = vec[i]; p->left = NULL; p = p->right; } } }};
参考代码二,c++ 额外空间 O(1)
class Solution {private: TreeNode* dfs(TreeNode *root){ if(!root) return NULL; TreeNode *leftNode = root->left; TreeNode *rightNode = root->right; TreeNode *cur = root; if(leftNode){ cur->right = leftNode; cur->left = NULL; cur = leftNode; cur = dfs(cur); } if(rightNode) { cur->right = rightNode; cur->left = NULL; cur = cur->right; cur = dfs(cur); } cur->left = NULL; return cur; }public: void flatten(TreeNode *root) { dfs(root); }};
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
- 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
- Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- 【leetcode】Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- 扩展思维能力
- Access PostgreSQL with Python
- 花花的心不知道
- next_permutation(,)用法
- 2008年9月计算机等级考试二级C++笔试试题答案与解析
- Leetcode_flatten-binary-tree-to-linked-list
- 第五周 项目1 构造三角形类(3)
- 关于R语言
- 黑马程序员--java基础总结--基本知识
- Yii-模型- criteria查找数据库方法
- 一些写英文简历词汇
- 背包之01背包、完全背包、多重背包详解
- 东方闪电实打实是滴是滴
- 安装McAfee后Foxmail不能发邮件