博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode :: Convert Sorted Array (link list) to Binary Search Tree [tree]
阅读量:5025 次
发布时间:2019-06-12

本文共 1993 字,大约阅读时间需要 6 分钟。

1.Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
2.Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
这里两道题目。是连在一起的两题。给你一个排好序(升序)的数组或者链表,将它们转为一棵平衡二叉树。如果不排好序的话。一组随机输入的数据,就必须採用RBT或者AVL树,这样操作会变得更复杂。涉及到旋转,可是这里排好序了。所以,仅仅要找到中位数。作为根,然后递归地依据中位数的左、右数列来构建左右子树;
两题的思路都是如上所述, 唯一的差别就是,链表寻找中位数会麻烦一些。须要引入fast、slow两个指针,来寻找中位数。代码例如以下:

1.Array

class Solution {public:    TreeNode *Tree(int left, int right, vector
&num){ TreeNode *root = NULL; if (left <= right){ int cen = (left + right) / 2; root = new TreeNode(num[cen]); root->left = Tree(left, cen - 1, num); root->right = Tree(cen + 1, right, num); } return root; } TreeNode *sortedArrayToBST(vector
&num) { TreeNode *T = NULL; int N = num.size(); T = Tree(0, N - 1, num); return T; }};
2.link-list

class Solution {public:    ListNode *findMid(ListNode *head){        //这里假设链表中仅仅有两个数字。则mid返回的是head->next.        if (head == NULL || head -> next == NULL)            return head;        ListNode *fast, *slow, *pre;        fast = slow = head;        pre = NULL;        while (fast && fast->next){            pre = slow;            slow = slow->next;            fast = fast->next->next;        }        pre->next = NULL;        return slow;    }        TreeNode *buildTree(ListNode *head){        TreeNode *root = NULL;        ListNode *mid = NULL;        if (head){            mid = findMid(head);            root = new TreeNode(mid->val);            if (head != mid){                root->left = buildTree(head);                root->right = buildTree(mid->next);            }        }        return root;            }        TreeNode *sortedListToBST(ListNode *head) {        TreeNode *T;        T = buildTree(head);        return T;    }};

转载于:https://www.cnblogs.com/mengfanrong/p/5097087.html

你可能感兴趣的文章
hdu 5139(离线处理+离散化下标)
查看>>
链接按钮LinkButton(按钮组)
查看>>
配送计划导入子表设计
查看>>
在LINUX上,Apache安装记
查看>>
poj1279 半平面交
查看>>
16款最佳HTML5超酷动画演示及源码
查看>>
sql索引
查看>>
软件架构纵横谈
查看>>
新博客的第一道题 蓝桥杯 蚂蚁感冒
查看>>
时序数据库的选择?
查看>>
SQL中 SET QUOTED_IDENTIFIER OFF语句的作用
查看>>
HDU 5410(2015多校10)-CRB and His Birthday(全然背包)
查看>>
hdu 2874 Connections between cities(st&rmq LCA)
查看>>
【Linux基础学习之五】Linux管理命令的基础学习(df、du、free、kill、tar等)
查看>>
20171115
查看>>
求最长公共子串
查看>>
根据百度API获得经纬度,然后根据经纬度在获得城市信息
查看>>
强制客户端更新Silverlight XAP文件方法汇总(转)
查看>>
Android tabLayout+recyclerView实现锚点定位
查看>>
numpy.squeeze()的用法
查看>>