leetCode # Convert Sorted List to Binary Search Tree
2015-08-24 23:11
435 查看
题目:将排好序的链表转化为二叉搜索树
分析:算法思路是取中间为根节点,左边是左子树,右边是右子树,然后递归
答案:
分析:算法思路是取中间为根节点,左边是左子树,右边是右子树,然后递归
答案:
/** * 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: TreeNode* createTree(ListNode* head, int left, int right){ if (left > right) return NULL; int mid = (left+right)/2; // find mid node ListNode* cNode = head; for (int i = left; i < mid; i++){ cNode = cNode->next; } TreeNode* tNode = new TreeNode(cNode->val); tNode->left = createTree(head, left,mid-1); tNode->right = createTree(cNode->next, mid+1, right); return tNode; } int getLength(ListNode* head){ int len = 0; ListNode* p = head; while(p){ p = p->next; len++; } return len; } public: TreeNode* sortedListToBST(ListNode* head) { createTree(head,0,getLength(head)-1); } };注意:很有意思的一个问题是边界的判断。我一开始把最后一句写成createTree(head,0,getLength(head))就出现了无限循环
相关文章推荐
- USB软硬件知识之一:综述
- bootstrap加载model以及dataTable按钮操作
- Android开发异常
- 字符复制输出
- android 开发 常用到的一些网络通信包
- 总结系列--系统标准Activity的Action应用
- java中的权限修饰
- CheungSSH_WEB版本使用手册
- VS2010 动态库开发——第一章 演练:创建和使用动态链接库 (C++)
- wordpress第一天
- 华为上机试题4(坐标移动)
- Unity2d 5.1 弱联网游戏制作 (一)场景创建、添加组件、精灵移动、主摄像机跟随
- 数据挖掘中的维灾难
- MatConvNet学习笔记
- 8.24学习总结
- java 类加载机制(详解)
- JavaScript基础
- mysql在linux下的my.cnf文件在哪里!
- servlet 解决中文乱码
- UVA 11021 Tribles (概率dp)