博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单向链表转平衡二叉搜索树
阅读量:4607 次
发布时间:2019-06-09

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

题目描述

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
temp; while(head != NULL) { temp.push_back(head->val); head = head->next; } return vecToBST(temp); } private: TreeNode* vecToBST(vector
&node) { if(node.size() == 0) return NULL; int len = node.size(); TreeNode *root = new TreeNode(node[ len/2 ]); vector
left(node.begin(), node.begin() + len/2); vector
right(node.begin() + len/2 + 1, node.end()); root->left = vecToBST(left); root->right = vecToBST(right); return root; }};

参考别人的代码

(平衡)二叉树搜索树的中序变量可以是一个排了序的单向链表, 可以用左右子树的节点个数,控制二叉搜索树是一个平衡二叉搜索树。

/** * 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 {private:    ListNode* list;     public:    TreeNode* sortedListToBST(ListNode* head) {        if(head == NULL)            return NULL;                 list = head;         return generate(count(head));     }    private:    // 计数    int count(ListNode* pos)    {        int size = 0;         while(pos != NULL)        {            size++;             pos = pos->next;         }                return size;     }        // 按照计数和中序遍历构造平衡二叉搜索树    TreeNode* generate(int n)    {        if(n == 0)            return NULL;                 TreeNode* node = new TreeNode(0);         node->left = generate(n/2);         node->val = list->val;         list = list->next;         node->right = generate(n - n/2 - 1);                 return node;     }};

转载于:https://www.cnblogs.com/acm1314/p/7118982.html

你可能感兴趣的文章
爬虫,第五次实战之(肯德基地址)
查看>>
SAP CRM 忠诚度相关表的关系图
查看>>
云计算技术前景怎么样?云计算开发学院分享
查看>>
tools
查看>>
Linq update
查看>>
VC各种链接错的解决办法【转】http://www.2cto.com/kf/201203/124100.html
查看>>
Java入门第二季——第4章 多态
查看>>
第七章 路由 77 路由-使用children属性实现路由嵌套
查看>>
HTML5+CSS 静态网页-极米商城
查看>>
java反射
查看>>
SQL基础(三):SQL命令
查看>>
【bioinfo】生物信息学——代码遇见生物学的地方
查看>>
Canvas+Js制作动量守恒的小球碰撞
查看>>
PC电源-厂商及品牌篇(台厂及国际品牌篇)(第二版)
查看>>
一个最简单的Makefile例子
查看>>
Cookie安全漫谈
查看>>
R语言学习 - 线图一步法
查看>>
区间加权和
查看>>
java-异常
查看>>
unity中虚拟摇杆的实现
查看>>