leetcode 109. Convert Sorted List to Binary Search Tree 链表构造平衡二叉搜索树 + DFS
来源:互联网 发布:k歌之王国语和粤语知乎 编辑:程序博客网 时间:2024/04/28 07:51
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
根据一个排序好的链表构造二叉平衡树,这个问题的重点是找到中间元素,使用双指针即可。
建议和 leetcode 108. Convert Sorted Array to Binary Search Tree 构建平衡二叉搜索树 + DFS、leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 中后序构造BST、 leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 中前序构造BST放到一起学习。
代码如下:
/*class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}*//* * 这个题很简单,主要就是使用数组类似的方法去做 * 问题的关键就是找到middle位置,可以考虑使用双指针来解决 * */public class Solution { public TreeNode sortedListToBST(ListNode head) { return toBST(head,null); } public TreeNode toBST(ListNode head, ListNode tail) { if(head == tail) return null; else { ListNode mid = getMid(head,tail); TreeNode root = new TreeNode(mid.val); //注意这个要考虑到head和tail root.left = toBST(head, mid); root.right = toBST(mid.next,tail); return root; } } //双指针遍历 public ListNode getMid(ListNode head,ListNode tail) { ListNode slow = head,fast = head; while(fast!=tail) { fast = fast.next; if(fast!=tail) { fast = fast.next; slow = slow.next; } } return slow; }}
下面是C++的做法,和上一道题一模一样,直接类似二叉树DFS深度优先遍历即可,不过这里用到了双指针来寻找中间节点
代码如下:
#include <iostream>#include <vector>#include <queue>#include <algorithm>using namespace std;/*struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};*/class Solution {public: TreeNode* sortedListToBST(ListNode* head) { return getAll(head,NULL); } TreeNode* getAll(ListNode* beg , ListNode* end) { if (beg == end) return NULL; else { ListNode* mid = getMid(beg,end); TreeNode* root = new TreeNode(mid->val); root->left = getAll(beg, mid); root->right = getAll(mid->next, end); return root; } } ListNode* getMid(ListNode* head, ListNode* end) { ListNode* fast = head; ListNode* slow = head; while (fast != end) { fast = fast->next; if (fast != end) { fast = fast->next; slow = slow->next; } } return slow; }};
阅读全文
0 0
- leetcode 109. Convert Sorted List to Binary Search Tree 链表构造平衡二叉搜索树 + DFS
- leetcode 108. Convert Sorted Array to Binary Search Tree 构建平衡二叉搜索树 + DFS
- 有序递增链表转化为平衡的二叉搜索树(LeetCode: Convert Sorted List to Binary Search Tree )
- 109.leetcode Convert Sorted List to Binary Search Tree(medium)[链表 平衡二叉搜索树 二分查找]
- LeetCode | Convert Sorted List to Binary Search Tree(链表转换成二叉搜索树)
- LeetCode 109. Convert Sorted List to Binary Search Tree(链表到二叉搜索树)
- Leetcode 108 Convert Sorted Array to Binary Search Tree 有序数组构造平衡二叉查找树
- LeetCode--Convert Sorted Array to Binary Search Tree(平衡二叉搜索树)
- LeetCode Convert Sorted List to Binary Search Tree(有序单链表转为平衡二叉树)
- LeetCode OJ 之 Convert Sorted List to Binary Search Tree(把有序链表转化为二叉搜索树)
- Leetcode Convert Sorted List to Binary Search Tree 把有序链表转换成二叉搜索树
- leetcode---Convert Sorted List to Binary Search Tree---二叉搜索树
- [leetcode][list][dfs] Convert Sorted List to Binary Search Tree
- leetcode dfs Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree (递增的链表转化成高度平衡的二叉查找树)【leetcode】
- Leetcode 109 Convert Sorted List to Binary Search Tree 有序单链表构造平衡二插查找树
- LeetCode | Convert Sorted Array to Binary Search Tree(有序数组转换成平衡二叉树搜索树)
- 108.leetcode Convert Sorted Array to Binary Search Tree(medium)[数组 二分查找 二叉平衡搜索树]
- 仿MIUI日历
- ligerui父页面向子页面传值
- MySQL数据类型
- intellij IDE 破解 简单 License server 法
- Maven 编译Spark遇到 PerMen Space....
- leetcode 109. Convert Sorted List to Binary Search Tree 链表构造平衡二叉搜索树 + DFS
- Hadoop中namenode无法启动
- 文章标题
- cmd命令
- php URL解析函数parse_str和parse_url的区别
- x86、x64、32位和64位
- cpu使用率高问题
- Two-Phase Learning for Weakly Supervised Object Localization
- eclipse-oxygen Ctrl + Shift + O 失效的解决办法