LeetCode 题解(51): Flatten Binary Tree to Linked List
来源:互联网 发布:少儿单片机培训机构 编辑:程序博客网 时间:2024/06/10 00:10
题目:
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
题解:自己做的笨办法,用堆栈进行前序遍历。
C++版:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void flatten(TreeNode *root) { if(!root) return; if(!root->left && !root->right) return; stack<TreeNode*> unvisited; unvisited.push(root); while(unvisited.size()) { TreeNode* current = unvisited.top(); unvisited.pop(); if(current->right) { unvisited.push(current->right); if(current->left) { unvisited.push(current->left); current->right = current->left; current->left = NULL; } } else { if(current->left) { unvisited.push(current->left); current->right = current->left; current->left = NULL; } else { if(unvisited.size()) current->right = unvisited.top(); else current->right = NULL; } } } }};
网上学了一下空间复杂度O(1)算法,真正的in-place flattern。好像叫做Morris Algorithm for binary tree traversal。
Java版:
public class Solution { public void flatten(TreeNode root) { if(root == null) return; TreeNode current = root; while(current != null) { if(current.left != null) { TreeNode next = current.left; while(next.right != null) next = next.right; next.right = current.right; current.right = current.left; current.left = null; } current = current.right; } }}
Python版:
class Solution: # @param root, a tree node # @return nothing, do it in place def flatten(self, root): if root == None: return current = root while current != None: if current.left != None: next = current.left while next.right != None: next = next.right next.right = current.right current.right = current.left current.left = None current = current.right
0 0
- LeetCode 题解(51): 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
- 【M】【83】【leetcode题解】Flatten Binary Tree to Linked List
- LeetCode题解-114-Flatten Binary Tree to Linked List
- leetcode Flatten Binary Tree to Linked List C++题解
- 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
- android4.4 webview调用javascript出现Uncaught ReferenceError: is not define或者has no method
- 间接寻址的自我练习
- gdb命令
- Linux 开机流程详解
- 蛇形填数
- LeetCode 题解(51): Flatten Binary Tree to Linked List
- 位运算实现 十进制(正负)转换成二进制
- 开始程序猿成长之路
- 今天给神州飞天UI41R D2装系统
- 视觉设计:如何做好App的引导页?
- 判断点是否在多边形内
- 开源飞控OpenPilot的扩展卡尔曼滤波EKF学习笔记(二)
- 去哪儿面试题
- 排序之堆排序