您的位置:首页 > 其它

Convert Sorted Array to Binary Search Tree and Merge Two Sorted Lists

2017-04-05 17:24 453 查看
之前几天的清明小长假,没有更新了,现在继续过来接着补上。

首先我们还是来看链表部分:Merge Two Sorted Lists

字面理解是,把两个有序的单链表合并成一个链表,当然合并过后的链表肯定是有序的,不管是升序还是降序。

分析:要合并两个链表,我们必须首先找到一个基准的链表的,定一个基准,这里我们以链表1为基准:

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode*  head = new ListNode(-1);
ListNode* cur = head;
while(l1 && l2){
if(l1 ->val < l2 ->val){
cur->next = l1;
l1 = l1->next;
}else {
cur->next = l2;
l2 = l2->next;
}
cur = cur ->next;
}
// 这里要注意,循环完成后,l1,l2中至少有一个遍历完成了,那么剩下的链表节点怎么办?
if(l1)
cur->next = l1;
if(l2)
cur->next = l2;
return head->next;  // 返回第二个节点开始的元素
}


这个我们通过直接思维方式。

下面我们再来通过递归的方式看看:

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1 == NULL)  return l1;
if(l2 == NULL)  return  l2;
ListNode*   ret = NULL;
if(l1->val < l2 ->val){
ret = l1;
ret->next = mergeTwoLists(l1->next,l2);
}else{
ret = l2;
ret->next = mergeTwoLists(l1,l2->next);
}
return  ret;
}


好的,我们再来看看二叉树的:Convert Sorted Array to Binary Search Tree

如何将一个有序数列转化成一个二叉树:

二叉树:左子树,根节点,右子树

public class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return helper(0,nums.length-1,nums);
}
public TreeNode helper(int start,int end,int[] nums){
int mid = start + (end - start)/2;
TreeNode  left = helper(start,mid -1;nums);
TreeNode  root = TreeNode(nums[mid]);
TreeNdoe   right = helper(mid + 1,end,nums);
root.left = left;
root.right = right;
return root;
}

}


齐活了,今天解析的两个知识点完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: