博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode/LeetCode] Convert Sorted List to Balanced BST [二叉搜索树]
阅读量:7174 次
发布时间:2019-06-29

本文共 1038 字,大约阅读时间需要 3 分钟。

Problem

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

Example

21->2->3  =>   / \             1   3

Note

用递归的方法来做,首先新建cur结点来复制head结点,然后计算链表head的长度,调用helper(start, end)函数建立平衡BST。

当链表为空时,helper()中出现start大于end,返回null。然后计算中点mid,以mid为界分别递归构建左右子树。顺序是,左子树-->根结点-->右子树。由于根节点root是直接取cur.val构建,当前的cur已经被取用。所以在下一次递归构建右子树之前,要让cur指向cur.next。最后将root和左右子树相连,返回root

Solution

public class Solution {    ListNode cur;    public TreeNode sortedListToBST(ListNode head) {          cur = head;        int len = 0;        while (head != null) {            head = head.next;            len++;        }        return helper(0, len-1);    }    public TreeNode helper(int start, int end) {        if (start > end) return null;        int mid = start+(end-start)/2;        TreeNode left = helper(start, mid-1);        TreeNode root = new TreeNode(cur.val);        cur = cur.next;        TreeNode right = helper(mid+1, end);        root.left = left;        root.right = right;        return root;    }}

转载地址:http://judzm.baihongyu.com/

你可能感兴趣的文章
操作系统多进程编程、多线程编程
查看>>
fread和fseek的用法
查看>>
PHP获取网站中各文章的第一张图片的代码示例
查看>>
Python的pandas
查看>>
ON DUPLICATE KEY UPDATE
查看>>
CRF 及CRF++ 安装与解释
查看>>
SQL Server 合并复制的Article可以指定单个对象的更新方向
查看>>
hreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
查看>>
npm常用命令
查看>>
String,StringBuffer和StringBuilder三者的讲解
查看>>
Understanding Digital Raw Capture
查看>>
(轉貼) 康乃爾筆記法(Cornell Method) (雜項)
查看>>
(原創) unnamed object的多型只能使用reference (C/C++)
查看>>
10种有用的CSS技巧
查看>>
linux命令tree用法详解
查看>>
matlab练习程序(TV模型图像修复)
查看>>
用户接口(UI)设计的 20 条原则
查看>>
Windows Azure HandBook (3) 浅谈Azure安全性
查看>>
div+css布局入门
查看>>
Linux 下Apache和Resin的安装
查看>>