Convert Sorted List to Binary Search Tree ------C++ 递归创建平衡二叉查找树
有序链表
0->1->2->3->4->5
转换为一个二叉排序树。我们在此创建一个平衡二叉排序树
1.先找链表到中间的节点
2.中间节点的val创建一个新的树节点TreeNode
3.将链表断裂为2部分
4.递归创建左子树和右子树
#include<iostream>
#include<cstdlib>
using namespace std; struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
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;
}
//创建新节点,返回
if(head->next==NULL){
TreeNode * root;
root=new TreeNode(head->val);
return root;
}
//只有2个节点,取第一个作为根节点,第2个作为右节点
if(head->next->next==NULL){
TreeNode * root;
root=new TreeNode(head->val);
TreeNode * right;
right=new TreeNode(head->next->val);
root->right=right;
return root;
}
//找到中间节点
ListNode *step1,*step2;
step1=head;
step2=head;
ListNode *temp;//保存中间节点的前一个节点
while(step2->next!=NULL&&step2->next->next!=NULL){
temp=step1;
step1=step1->next;
step2=step2->next->next;
}
temp->next=NULL;//将链表在中间断开
//创建新的根节点
TreeNode *root ;
root=new TreeNode(step1->val);
//递归创建左右子树
TreeNode *left,*right;
left=sortedListToBST(head);
right=sortedListToBST(step1->next);
root->left=left;
root->right=right;
return root;
}
};
class Travel{
public:
void travel(TreeNode * root){
if(root==NULL){
return ;
}
//cout<<root->val<<endl;//先序遍历
travel(root->left);
//cout<<root->val<<endl;//中序遍历
travel(root->right);
//cout<<root->val<<endl;//后续遍历
}
}; main(){
ListNode *head,*tail;
head=new ListNode();
tail=head;
for(int i=;i<;i++){
ListNode *temp;
temp=new ListNode(i);
tail->next=temp;
tail=tail->next;
}
Solution s;
TreeNode *root;
root=s.sortedListToBST(head);
Travel t;
t.travel(root); }
ps:送一个遍历小程序
Convert Sorted List to Binary Search Tree ------C++ 递归创建平衡二叉查找树的更多相关文章
- Convert Sorted List to Binary Search Tree——将链表转换为平衡二叉搜索树 &&convert-sorted-array-to-binary-search-tree——将数列转换为bst
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
- Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
[抄题]: Given an array where elements are sorted in ascending order, convert it to a height balanced B ...
- Leetcode: Convert sorted list to binary search tree (No. 109)
Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...
- [LeetCode] Convert Sorted List to Binary Search Tree 将有序链表转为二叉搜索树
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 这道 ...
- leetcode -- Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- 【leetcode】Convert Sorted List to Binary Search Tree
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
- 【leetcode】Convert Sorted Array to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
随机推荐
- sql查询当天数据
向数据库中添加日期 MS SQL SERVER: NSERT into student(studentid,time1)values('15',getdate()); MY SQLinsert int ...
- vs2013 中HTML页 无法在设计窗口中查看的解决
VS2013不支持HTML文件的解决办法: 1.将html文件重命名为aspx即可.不需要创建项目,直接拖进vs即可. 2.打开VS菜单->工具->选项->文本编辑器->文件扩 ...
- C - 字符识别?
C - 字符识别? Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit Sta ...
- Spring——AOP(面向切面编程)@AspectJ注解方式
一.什么是AOP? AOP: (Aspect Oriented Programming)即面向切面编程. 试想这样的场景:项目中需要在业务方法执行完打印日志记录.最笨的办法就是在每个方法核心业务执行完 ...
- SQLite 字符串连接
对Mysql可以使用CONCAT进行字符串连接, 但使用sqlite时,没有找到相应的方法,后在网上查找后,可以使用||来连接字符串 例: select 'a'||'b'
- bzoj 1303: [CQOI2009]中位数图
题目链接 给n个数,一个值b, 统计所有以b为中位数的序列的个数.序列长度为奇数.数字在1-n之间, 每个数只出现一次. 如果一个数大于b, 那么将他赋值为1, 小于b赋值为-1, 记录数组中b出现的 ...
- 生成输出url时,使用CSS来控制超链接的格式
在前文<生成输出url>中的第5点,介绍了使用ActionLink生成输出url中指定html标签属性. 例如, 假设Global.asax中的路由定义为: public static v ...
- .net mvc笔记2_Essential C# Features
Essential C# Features 1.Using Automatically Implemented Properties public class Product { private st ...
- 电脑Win7如何取得文件管理所有权(提供各种GHOST版本的Windows)
电脑Windows7系统如何取得文件管理所有权?从 VISTA开始,微软对操作系统的安全性有了明显的提高,这样使得以前我们在XP下都可以打开或删除的文件(夹),无法在WIN7下进行操作.就算是在 Ad ...
- cocos android分析
来自:http://xiebaochun.github.io/ cocos2d-x Android环境搭建 cocos2d-x环境搭建比較简单,可是小问题还是不少,我尽量都涵盖的全面一些. 下载软件 ...