leetcode--Flatten Binary Tree to Linked List
来源:互联网 发布:miss淘宝外设店网址 编辑:程序博客网 时间:2024/06/07 03:38
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
分类:二叉树
题意:将二叉树转换成链表
解法1:递归。递归方法将返回链表的第一个节点。对于根节点而言,分别递归转换左右子树,然后找到左链表的最后一个节点(如果存在的话),连接该节点与右链表。
再用根节点连接左链表。
该方法超时,原因在于找左链表的最后一个节点,耗时。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public void flatten(TreeNode root) { if(root==null) return ; flatten(root.left); flatten(root.right); TreeNode left = root.left; if(left==null) return; while(left.right!=null){//找到左链表最后一个节点 left = left.right; } left.right = root.right; root.right = root.left; } }
解法2:递归解决。该方法返回转换成链表以后的最后一个节点。与解法1不同,先递归转换左子树,然后连接左链表跟右子树的第一个节点,接着在递归转换右子树。最后连接根节点和左链表。由于返回的是最后一个节点,省去方法1所说的找到最后一个节点的时间。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public void flatten(TreeNode root) {helper(root); }TreeNode helper(TreeNode root){if(root==null) return null;TreeNode left = null;TreeNode right = null;if(root.left!=null){left = helper(root.left);if(left!=null){//如果左链表存在left.right = root.right;//连接左链表跟右子树root.right = root.left;//连接根节点跟左链表}root.left = null;}right = helper(root.right);//根据情况,返回最后一个节点if(right!=null)return right;else if(left!=null)return left;else return root;}}
解法3:使用栈。对于根节点,先后存入其左节点,右节点。然后将左节点连接到根节点的右边。至于其他节点,因为已经存在栈里面了。只要对于每个节点都重复上述过程,而不理会其子树。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public void flatten(TreeNode root) { if(root==null) return; Stack<TreeNode> stack = new Stack<TreeNode>(); stack.add(root); while(!stack.isEmpty()){ TreeNode cur = stack.pop(); if(cur.left!=null) stack.add(cur.left); if(cur.right!=null) stack.add(cur.right); cur.left=null; if(!stack.isEmpty()){//当前左节点转换成右节点 cur.right = stack.peek(); } } } }
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
- iOS7 状态栏颜色设置
- Java的重载和重写
- 为Android加入busybox工具
- linux集群系列(一):LVS+Keepalived以DR模式实现负载均衡
- Android Binder(zt)
- leetcode--Flatten Binary Tree to Linked List
- Sql Server如何新建作业
- 我的第一篇博客
- 使用MATLAB和UML进行嵌入式开发---四轴飞行器室内定位及导航系统 开篇(一)
- Android布局的优化
- android Binder
- myeclipse 上安装 Maven3
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- 数据结构与算法——冒泡排序