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

    二叉搜索树与双向链表


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

    思路:

    二叉搜索树的中序遍历为 递增序列 。
    将 二叉搜索树 转换成一个 “排序的循环双向链表” ,其中包含三个要素:

    • 排序链表: 节点应从小到大排序,因此应使用 中序遍历 “从小到大”访问树的节点。
    • 双向链表: 在构建相邻节点的引用关系时,设前驱节点 pre 和当前节点 cur ,不仅应构建 pre.right = cur ,也应构建 cur.left = pre 。
    • 循环链表: 设链表头节点 head 和尾节点 tail ,则应构建 head.left = tail 和 tail.right = head 。
    func Convert( pRootOfTree *TreeNode ) *TreeNode {
        if pRootOfTree == nil {
            return nil
        }
        var stack []*TreeNode
        var pre *TreeNode = nil
        var root *TreeNode = pre
        isFirst := true
        for len(stack) != 0 || pRootOfTree != nil {
            for pRootOfTree != nil {
                stack = append(stack, pRootOfTree)
                pRootOfTree = pRootOfTree.Left
            }
            sz := len(stack)
            if sz != 0 {
                pRootOfTree = stack[sz-1]
                stack = stack[:sz-1]
                if isFirst {
                    isFirst = false
                    pre = pRootOfTree
                    root = pre
                } else {
                    pre.Right = pRootOfTree
                    pRootOfTree.Left = pre
                    pre = pRootOfTree
                }
                pRootOfTree = pRootOfTree.Right
            }
        }
        return root
    }
  • 相关阅读:
    hive创建ES外部表过程中的问题
    Hive 与 ElasticSearch 的数据类型对照
    ambari启动hive服务失败
    calcite 1.22新特性
    自动化打包工具gulp
    js中数组的用法
    JavaScript的基础语法
    node.js初体验
    函数的执行过程和闭包
    Ajax -Asynchronous Javascript And XML(异步 JavaScript 和 XML)
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14639139.html
Copyright © 2011-2022 走看看