<LeetCode OJ> 109 / 108 Convert Sorted ( List / Array ) to Binary Search Tree
来源:互联网 发布:北大图书馆知乎 编辑:程序博客网 时间:2024/06/06 12:36
Total Accepted: 71642 Total Submissions: 233074 Difficulty: Medium
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
分析:
有序单表链转化成二叉树,本题和有序数组转化成二叉搜索树差别还是有的,但是可以先将链表转化成数组就成为上一题的模式了!但是这样做恐怕没有达到考察目的!
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* sortedListToBST(ListNode* head) { if( head == NULL ) return NULL; vector<int> nums; while(head) { nums.push_back(head->val); head=head->next; } return creatTree(nums,0,nums.size()-1); } TreeNode* creatTree(vector<int>& nums,int leftpos,int rightpos) { if(leftpos > rightpos) return NULL; int midpos= (leftpos+rightpos)/2; TreeNode* newnode=new TreeNode(nums[midpos]); newnode->right=creatTree(nums,midpos+1,rightpos); newnode->left=creatTree(nums,leftpos,midpos-1); return newnode; } };
学习别人的算法:
快慢指针寻找链表的中间位置,原来此题就像考察这个!!!才明白!
class Solution {public: TreeNode* sortedListToBST(ListNode* head) { if(head==NULL) return NULL; if(head->next==NULL) return new TreeNode(head->val); return creatTree(head,NULL); } TreeNode* creatTree(ListNode* head,ListNode* tail) { if(head==tail) return NULL; //head是起始节点,tail是终止结点的下一个结点 ListNode* slow=head; ListNode* fast=head; while(fast!=tail && fast->next!=tail)//通过快慢指针快速找到根节点 { fast=fast->next->next; slow=slow->next; } TreeNode* res=new TreeNode(slow->val); res->left=creatTree(head,slow);//递归的构建左子树,右子树 res->right=creatTree(slow->next,tail); return res; } };
Total Accepted: 77544 Total Submissions: 206040 Difficulty: Medium
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
分析:
有序数组转化成二叉搜索树。本题解题思路还是比较明显的!因为数组有序,为了能平衡,总是选择数组(未被使用过的位置的)中间位置的值作为当前二叉树的根节点!出门看了一下别人的做法,尽然不谋而合!
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* sortedArrayToBST(vector<int>& nums) { if( nums.size() == 0 ) return NULL; return creatTree(nums,0,nums.size()-1); } TreeNode* creatTree(vector<int>& nums,int leftpos,int rightpos) { if(leftpos > rightpos) return NULL; int midpos= (leftpos+rightpos)/2; TreeNode* newnode=new TreeNode(nums[midpos]); newnode->right=creatTree(nums,midpos+1,rightpos); newnode->left=creatTree(nums,leftpos,midpos-1); return newnode; }};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/51570438
原作者博客:http://blog.csdn.net/ebowtang
本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895
1 0
- <LeetCode OJ> 109 / 108 Convert Sorted ( List / Array ) to Binary Search Tree
- 【LeetCode】Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
- LeetCode OJ:Convert Sorted Array to Binary Search Tree
- LeetCode OJ - Convert Sorted Array to Binary Search Tree
- [LeetCode OJ]Convert Sorted Array to Binary Search Tree
- [Leetcode]Convert Sorted Array & List to Binary Search Tree
- 【leetcode】Convert Sorted Array/List to Binary Search Tree
- LeetCode:Convert Sorted Array(List) to Binary Search Tree
- LeetCode OJ:Convert Sorted List to Binary Search Tree
- LeetCode OJ - Convert Sorted List to Binary Search Tree
- LeetCode OJ Convert Sorted List to Binary Search Tree
- leetCode 108,109:Convert Sorted Array/List to Binary Search Tree
- leetcode oj java 108 Convert Sorted Array to Binary Search Tree
- Leetcode 108 Convert Sorted Array to Binary Search Tree
- Leetcode 108 Convert Sorted Array to Binary Search Tree
- LeetCode 108: Convert Sorted Array to Binary Search Tree
- LeetCode(108)Convert Sorted Array to Binary Search Tree
- LeetCode 108 Convert Sorted Array to Binary Search Tree
- tar命令基本用法
- linear_regression
- 二叉树的创建与前序遍历(递归方式)
- window 下mysql5.7.12安装报错记录
- java数据结构之(顺序栈+链式栈)
- <LeetCode OJ> 109 / 108 Convert Sorted ( List / Array ) to Binary Search Tree
- NodeJs——(1)封装,调用,执行,访问路径,http,函数编程,等待函数,事件监听
- sql技巧-构造分组条件
- 【黑马Android】(13)Linux操作系统/cron计划任务
- android socket 通信(2)--传文件
- JAVA 数据类型
- Oracle11gR2_RAC_for_redhat6.3 安装手册
- POJ 2155 Matrix
- GitHub网站文件删除