当前位置: 首页 > news >正文

LeetCode -- Convert SortedList To BST

题目描述:


Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.


就是把链表转化为二叉查找树


思路:
使用分治策略
1.把链表节点遍历,存在nodes集合中
2.用[0, length/2)节点创建左子树,用(length/2,n]节点创建右子树,使用nodes[length/2]来创建当前节点。




实现代码:






/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode SortedListToBST(ListNode head) {
        if(head == null){
		return null;
	}
	
	var nodes = new List<int>();
	while(head != null){
		nodes.Add(head.val);
		head = head.next;
	}
	
	TreeNode root = null;
	BuildTree(nodes,ref root);
	
	return root;
}


private void BuildTree(IList<int> values,ref TreeNode n){
	if(values.Count == 0){
		return;
	}


	var mid = (int)(values.Count/2);
	var self = values[mid];
	n = new TreeNode(self);
	
	var leftVals=  values.Where(x=>x < self);
	var rightVals = values.Where(x=>x > self);
	
	if(leftVals.Any()){
		BuildTree(leftVals.ToList() ,ref n.left);
	}
	if(rightVals.Any()){
		BuildTree(rightVals.ToList(),ref n.right);
	}
}




}


相关文章:

  • HTTP协议返回状态码表
  • LeetCode -- Insert Interval
  • 推荐WPF的好书
  • LeetCode -- Longest Valid Parentheses
  • 利用Intel博锐技术解决桌面管理难题
  • LeetCode -- Permutations
  • LeetCode -- Construct Binary Tree from Inorder and Postorder Traversal
  • 王小云:十年破译五部顶级密码
  • LeetCode -- Factorial Trailing Zeroes
  • LeetCode -- Gas Station
  • 山东大学王小云教授成功破解MD5
  • LeetCode -- Implement Trie (Prefix Tree)
  • 2009年的3G上网卡市场,华为将会领跑
  • LeetCode -- Kth Smallest Element in a BST
  • SQL2005CLR函数扩展-环比计算
  • 【EOS】Cleos基础
  • Computed property XXX was assigned to but it has no setter
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript创建对象的四种方式
  • Linux各目录及每个目录的详细介绍
  • mysql常用命令汇总
  • Python爬虫--- 1.3 BS4库的解析器
  • React的组件模式
  • Redis中的lru算法实现
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Tornado学习笔记(1)
  • Vim Clutch | 面向脚踏板编程……
  • vue 个人积累(使用工具,组件)
  • 从PHP迁移至Golang - 基础篇
  • 从零开始的无人驾驶 1
  • 动态魔术使用DBMS_SQL
  • 分享几个不错的工具
  • 好的网址,关于.net 4.0 ,vs 2010
  • 蓝海存储开关机注意事项总结
  • 聊聊hikari连接池的leakDetectionThreshold
  • 强力优化Rancher k8s中国区的使用体验
  • 如何优雅地使用 Sublime Text
  • 通过npm或yarn自动生成vue组件
  • 微服务框架lagom
  • 延迟脚本的方式
  • No resource identifier found for attribute,RxJava之zip操作符
  • Linux权限管理(week1_day5)--技术流ken
  • puppet连载22:define用法
  • 整理一些计算机基础知识!
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (04)odoo视图操作
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (arch)linux 转换文件编码格式
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C++17) std算法之执行策略 execution
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (分布式缓存)Redis分片集群