[leetcode]114. Flatten Binary Tree to Linked List@Java解题报告

来源:互联网 发布:手机淘宝5.2.8版本 编辑:程序博客网 时间:2024/06/05 22:43

https://leetcode.com/problems/flatten-binary-tree-to-linked-list/description/


Given a binary tree, flatten it to a linked list in-place.

For example,
Given

         1        / \       2   5      / \   \     3   4   6

The flattened tree should look like:
   1    \     2      \       3        \         4          \           5            \             6

click to show hints.

Hints:

If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.


本题有递归和循环解法


package go.jacob.day808;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * 114. Flatten Binary Tree to Linked List * @author Jacob * */public class Demo4 {/* * 解法一 * 递归解法 * 从尾到头逆序处理 */TreeNode pre=null;public void flatten(TreeNode root) {if(root==null)return ;flatten(root.right);flatten(root.left);root.left=null;root.right=pre;pre=root;}/* * 解法二:循环求解 */public void flatten_1(TreeNode root) {if(root==null)return;Stack<TreeNode> stack=new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode node=stack.pop();if(node.right!=null)stack.push(node.right);if(node.left!=null)stack.push(node.left);if(!stack.isEmpty())node.right=stack.peek();node.left=null;}}/* * 低效率解法 */public void flatten_2(TreeNode root) {if(root==null)return;List<TreeNode> list=new ArrayList<TreeNode>();Stack<TreeNode> stack=new Stack<TreeNode>();stack.push(root);TreeNode node=null;while(!stack.isEmpty()||node!=null){if(node==null){node=stack.pop();node=node.right;}else{stack.push(node);list.add(node);node=node.left;}}TreeNode node1=null;TreeNode node2=null;for(int i=0;i<list.size()-1;i++){node1=list.get(i);node2=list.get(i+1);node1.left=null;node1.right=node2;}node2.left=null;node2.right=null;}}


阅读全文
0 0
原创粉丝点击