码迷,mamicode.com
首页 > 其他好文 > 详细

114. Flatten Binary Tree to Linked List

时间:2018-10-04 23:06:15      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:flat   node   png   pre   str   ack   vat   ISE   bin   

一、题目

  1、审题

技术分享图片

  2、分析

    给出一棵二叉树,按照先序遍历顺序组成一棵斜右二叉树。

 

二、解答

  1、思路:

    方法一、 

      采用一个栈进行先序遍历,遍历时将节点重新组装。

public void flatten(TreeNode root) {
        Stack<TreeNode> stack = new Stack<TreeNode>();
        if(root == null)
            return;
        stack.add(root);
        TreeNode tmpNode = root;
        
        while(!stack.isEmpty()) {
            
            TreeNode node = stack.pop();
            
            if(node.right != null)
                stack.add(node.right);
            
            if(node.left != null)
                stack.add(node.left);
            
            if(node != root) {
                tmpNode.right = node;
                tmpNode.left = null;
                tmpNode = node;
            }
        }
    }

  

  方法二、

    采用递归

    递归实现 右-->左-->根 遍历,并拼接原二叉树的节点顺序。

   private TreeNode prev = null;
    public void flatten(TreeNode root) {
        if(root == null)
            return;
        
        flatten(root.right);
        flatten(root.left);
        
        root.right = prev;
        root.left = null;
        prev = root;
    }

 

  方法三、

    采用 Morris Traversal 方法线索二叉树。

    线索二叉树,利用叶子节点中的空闲指针指向中序遍历的后续一个节点。

    性能较好,O(1)空间复杂度

    public void flatten3(TreeNode root) {
        
        TreeNode cur = root;
        TreeNode pre = root;
        
        while(cur != null) {
            
            if(cur.left == null) {
                cur = cur.right;
            }
            else {
                pre = cur.left;
                while(pre.right != null && pre.right != cur)
                    pre = pre.right;
                
                if(pre.right == null) {
                    pre.right = cur;
                    cur = cur.left;
                }
                else {
                    TreeNode right = cur.right;
                    cur.right = cur.left;
                    cur.left = null;
                    pre.right = right;
                    cur = right;
                }
            }
        }
    }

 

114. Flatten Binary Tree to Linked List

标签:flat   node   png   pre   str   ack   vat   ISE   bin   

原文地址:https://www.cnblogs.com/skillking/p/9743605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!