zoukankan      html  css  js  c++  java
  • 算法——二叉搜索树与双向链表

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
    leetcode

    解题思路:中序遍历链表,保留上一个节点,每次遍历到一个节点的时候,将上一个节点right指向当前节点,再将当前节点的left指向上个节点。

    第一次枚举到left的尽头的时候,就是头节点。

    最后需要将头节点和尾节点连上。

    class Solution {
        public Node treeToDoublyList(Node root) {
            Deque<Node> stack = new LinkedList<>();
            Node pre = null, head = root;
    
            if(root == null) return root;
    
            while(root != null || !stack.isEmpty()) {
                while(root != null) {
                    stack.push(root);
                    root = root.left;
                }
    
                root = stack.pop();
                if(pre == null) {
                    head = root;
                } else {
                    pre.right = root;
                    root.left = pre;
                }
    
                pre = root;
    
                root = root.right;
            }
    
            pre.right = head;
            head.left = pre;
    
            return head;
    
        }
    }
    
  • 相关阅读:
    poi 导出excel表格
    js 表单非空校验
    表格添加 点击添加增加一列
    date日期比较
    oralce 匿名块 练习
    SQL 入门
    Map集合&&异常处理&&file类
    Properties集合&&工具类FileUtils
    Java中Date类&&Calendar类
    jquery的基础
  • 原文地址:https://www.cnblogs.com/lippon/p/14117670.html
Copyright © 2011-2022 走看看