【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告
生活随笔
收集整理的這篇文章主要介紹了
【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
原題地址:
https://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
?
題目內(nèi)容:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
?
方法:
單純。如何安排插入順序,使得一棵二叉排序樹接近平衡?
你從中間開始插嘛。這樣左子樹和右子樹之差或者為0,或者為1。
所以,這個問題的本質(zhì)是找鏈表的中間節(jié)點。
找到中間節(jié)點后,遞歸產(chǎn)生左子樹和右子樹,在找左邊子鏈表的中間節(jié)點和右邊子鏈表的中間節(jié)點即可。
當(dāng)然啦,最后返回中間節(jié)點。
?
全部代碼:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; next = null; }* }*/ /*** Definition for binary tree* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/ public class Solution {public TreeNode sortedListToBST(ListNode head) {int len = countLen(head);if (len == 0)return null;return constructTree(head,len); // len is the number of nodes in list. }private TreeNode constructTree(ListNode head,int len){if (head == null || len <= 0)return null;int mid = len / 2 + 1;TreeNode tmp = new TreeNode(head.val);tmp.left = null;tmp.right = null;if (mid == 0)return tmp;ListNode tar = findMidNode(head,mid);tmp.val = tar.val;tmp.left = constructTree(head,mid - 1);tmp.right = constructTree(tar.next,len - mid);return tmp;}private ListNode findMidNode(ListNode head,int mid){int count = 1;while (mid != count++)head = head.next;return head;}private int countLen(ListNode head){int len = 0;while (head != null){len ++;head = head.next;}return len;} }?
轉(zhuǎn)載于:https://www.cnblogs.com/shadowmydx/p/4117402.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓4.2原生rom状态栏显示运营商
- 下一篇: 了解AdvStringGrid