美文网首页
将链表转换为平衡二叉树

将链表转换为平衡二叉树

作者: FredricZhu | 来源:发表于2020-08-18 13:43 被阅读0次
图片.png
package main

import "fmt"

// LNode 链表的单个节点对象
type LNode struct {
    Val  int
    Next *LNode
}

// TNode 二叉树的单个节点对象
type TNode struct {
    Val   int
    Left  *TNode
    Right *TNode
}

func findMid(left *LNode, right *LNode) *LNode {
    fast := left
    slow := left

    for fast != right && fast.Next != right {
        fast = fast.Next
        fast = fast.Next
        slow = slow.Next
    }

    return slow
}

func buildTree(head *LNode, tail *LNode) *TNode {
    if head == tail {
        return nil
    }

    mid := findMid(head, tail)
    root := &TNode{Val: mid.Val}
    root.Left = buildTree(head, mid)
    root.Right = buildTree(mid.Next, tail)
    return root
}

// List2Tree 将链表转换为树的方法
func List2Tree(head *LNode) *TNode {
    return buildTree(head, nil)
}

// PrintTree 打印树结构的函数
func PrintTree(root *TNode) {
    if root == nil {
        return
    }

    fmt.Printf("%v->", root.Val)
    PrintTree(root.Left)
    PrintTree(root.Right)
}

func main() {
    head := &LNode{
        Val: -10,
        Next: &LNode{
            Val: -3,
            Next: &LNode{
                Val: 0,
                Next: &LNode{
                    Val: 5,
                    Next: &LNode{
                        Val: 9,
                    },
                },
            },
        },
    }

    root := List2Tree(head)
    PrintTree(root)
}

程序输出,

图片.png

相关文章

  • 将链表转换为平衡二叉树

    程序输出,

  • Leetcode109.有序链表转换二叉搜索树

    题目描述 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一...

  • 69_二叉树的线索化实现

    关键词:二叉树的额线索化 0. 什么是线索化二叉树? 将二叉树转换为双向链表的过程(非线性==》线性) 能够反映某...

  • 二叉树转链表

    给定一个二叉树,将该二叉树 就地(in-place)转换为单链表。单链表中节点顺序 为二叉树前序遍历顺序。(不额外...

  • 2019-08-10

    红黑树是一种介于链表和平衡二叉树之间的折中方案,查找和插入都是相对于链表和平衡二叉树来说更平衡的,不会产生太极端的...

  • InnoDB 索引

    链表 -> 二叉查找树 -> 平衡二叉树 -> B树 -> B+树 链表:层级等于链表长度二叉查找树:链表优化,...

  • 单链表转换为平衡查找树(Leetcode109)

    题目要求 给定一个升序的单链表,将其转换为一颗平衡查找树 举例:给定链表[-10,-3,0,5,9],转换为[0,...

  • 二叉排序树转双向链表

    排序二叉树转换为排序双向链表 题目:输入一棵二叉排序树,将该二叉排序树转换成一个排序的带头结点的双向链表。如: 转...

  • 将有序数组转换为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左...

  • 5 - Easy - 将有序数组转换为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的...

网友评论

      本文标题:将链表转换为平衡二叉树

      本文链接:https://www.haomeiwen.com/subject/cqahjktx.html