[LeetCode]Convert Sorted List to Binary Search Tree

来源:互联网 发布:java可变参数 定义 编辑:程序博客网 时间:2024/05/19 13:55

题目描述

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

给定一个已排好序的链表,构建其相应的二叉搜索树。

解题思路


看到题目,映入眼帘的肯定是递归方法:
  1. 找到待构建链表的中间位置,将其对应的treeNode提出作为根节点(root);
  2. 构建中间位置左边链表的BST,返回结果作为root.left;
  3. 构建 中间位置的右边链表的BST,返回结果作为root.right;

代码实现中,我没有直接操作链表,而是首先根据linked list生成对应的ArrayList<TreeNode>,然后对ArrayList<TreeNode>进行递归求解,具体解法请看下面代码。


代码


/** * 根据已排序列表构建二叉搜索树 * @param head * @return */public static TreeNode sortedListToBST(ListNode head) {ArrayList<TreeNode> list = new ArrayList<TreeNode>();if(head==null)return null;//通过链表的值构建treenode并存储到list中while (head != null) {list.add(new TreeNode(head.val));head = head.next;}return buildBST(0, list.size() - 1, list);}


/** * 构建二叉搜索树 * @param start 待构建二叉树的treeNode列表的起始位置 * @param end 待构建二叉树的treeNode列表的结束位置 * @param list * @return */public static TreeNode buildBST(int start, int end, ArrayList<TreeNode> list) {int middle = start + (end - start) / 2;//中间节点TreeNode root = list.get(middle);if(start==end){return root;}if (middle - 1 >= start) {root.left = buildBST(start, middle - 1, list);}if (middle + 1 <= end) {root.right = buildBST(middle + 1,end, list);}return root;}



0 0