zoukankan      html  css  js  c++  java
  • 栈和队列----将搜索二叉树转换成双向链表

    将搜索二叉树转换成双向链表

      

      对于BST 来说,有本身的值域,有指向左孩子和右孩子的两个指针;对于双向链表来说,有本身的值域,有指向上一个节点和下一个节点的指针。将这个BST转换成双向链表,对于每一个节点来说,原来的right指针等价于转换后的next指针,原来的left指针等价于转换后的left指针,最后返回双向链表的头节点。

      

      【解析】

      用队列等容器收集二叉树 中序遍历的结果的方法。其时间复杂度是O(N),空间复杂度是O(N)。

      1. 生成一个队列,记为queue,按照二叉树的中序遍历的顺序,将每个节点放入queue中

      2. 从queue中依次弹出节点,并按照弹出的顺序重连所有的节点即可

      

    package com.test;
    
    import com.test.TreeNode;
    
    import java.util.LinkedList;
    import java.util.Queue;
    
    /**
     * Created by Demrystv.
     */
    public class ConvertBSTTOListNodeDouble {
    
        /**
         * 用队列等容器收集二叉树 中序遍历的结果的方法。其时间复杂度是O(N),空间复杂度是O(N)
         */
        public TreeNode convertBSTToListNodeDouble(TreeNode head){
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            inOrderToQueue(head, queue);
            if (queue.isEmpty()){
                return head;
            }
            head = queue.poll();
            TreeNode pre = head;
            pre.left = null;
            TreeNode cur = null;
    
            while (!queue.isEmpty()){
                cur = queue.poll();
                pre.right = cur;
                cur.left = pre;
                pre = cur;
            }
            pre.right = null;
            return head;
        }
    
        // 用递归的方式将中序遍历结果 放到 queue 中
        private void inOrderToQueue(TreeNode head, Queue<TreeNode> queue){
            if (head == null){
                return;
            }
            inOrderToQueue(head.left, queue);
            queue.offer(head);
            inOrderToQueue(head.right, queue);
        }
    
    }

      

  • 相关阅读:
    MXNet--DMLC-Core代码解读与宏
    mxnet的训练过程——从python到C++
    L1正则化及其推导
    mshadow的原理--MXNet
    A-Softmax的总结及与L-Softmax的对比——SphereFace
    天猫-淘宝年货精选,内部特供,最高折扣,最优质量
    get_template_part() 函数详解备忘(转)
    (转)WordPress的主查询函数-query_posts()
    深度剖析WordPress主题结构(转)
    Science上发表的超赞聚类算法(转)
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9352959.html
Copyright © 2011-2022 走看看