如何将有序数组转换为二叉搜索树
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章将为大家详细讲解有关如何将有序数组转换为二叉搜索树,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。算法:核心思想是利用二分法,不过有序数组和有序
千家信息网最后更新 2025年01月27日如何将有序数组转换为二叉搜索树
这篇文章将为大家详细讲解有关如何将有序数组转换为二叉搜索树,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
算法:
核心思想是利用二分法,不过有序数组和有序链表找到中间节点的方法不一致。
1.对有序数组或者有序链表来说,把中间节点当作根节点2. 左边数组的值都小于根节点,作为左子树; 右边数组的值都大于根节点,作为右子树。3. 递归处理左子树和右子树,一直到只剩下一个节点。
题目1:
https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/
代码实现:
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func sortedArrayToBST(nums []int) *TreeNode { if len(nums) == 0 { return nil } mid := len(nums)/2 root := new(TreeNode) root.Val = nums[mid] root.Left = sortedArrayToBST(nums[:mid]) root.Right = sortedArrayToBST(nums[mid+1:]) return root}// 算法:核心思想是利用二分法,对有序数组来说,把中间节点当作根节点,// 左边数组的值都小于根节点,作为左子树;// 右边数组的值都大于根节点,作为右子树。// 递归处理左子树和右子树,一直到只剩下一个节点。
执行结果:
题目2:
https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/
代码实现:
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } *//** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func sortedListToBST(head *ListNode) *TreeNode { if head == nil { return nil } if head.Next == nil { return &TreeNode{Val:head.Val} } // 小技巧:方便一次循环找到中间节点的前序节点,哨兵 s := new(ListNode) s.Next = head f := head for f != nil && f.Next != nil { // 精髓:快慢指针,1步,2步正好是二等分,可以延伸出三等份,n等分 s = s.Next f = f.Next.Next } res := new(TreeNode) res.Val = s.Next.Val r := s.Next.Next s.Next = nil // 左半部分单独成一个链表 res.Left = sortedListToBST(head) res.Right = sortedListToBST(r) return res}// 算法:利用二分法,这里是采用了链表二分法的常规做法,// 找到中间节点之后,将链表一分为二,左边的继续构造左子树,右边的为右子树// 递归处理,直到所有节点都处理完。
执行结果:
关于如何将有序数组转换为二叉搜索树就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
节点
子树
数组
有序
二分法
处理
右边
算法
递归
搜索
代码
内容
思想
文章
更多
核心
知识
等分
篇文章
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
excel服务器路径
个人如何做到网络安全
vs数据库怎么连接
奇云宝可梦服务器怎么创造
ibm免费数据库
软件开发如何进行模块划分
中国海洋大学网络安全教育
泰国服务器租用
网络安全等级保护体系优点
go对数据库
我的世界服务器怎么回收出售物品
安徽专业软件开发价格参考价格
六盘水 服务器
网络安全王鑫发展怎么样
php循环输出数据库数据
数据库中性别用哪种类型
国内外常用文献数据库介绍
公安局网络安全 设备
数据库将R分解成3NF
高中信息网络技术知识点
mc服务器管理
达梦数据库免费么
河北第一届网络安全知识竞赛
邢台网络技术参数
软件开发逻辑图
冬奥会网络安全宣贯
杭州踏金网络技术有限公司
安康软件开发价格多少
跑腿软件开发那家好
联想服务器和浪潮服务器