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 ...
随机推荐
- Mac上小巧实用的GIF格式录屏软件 LICEcap
LICEcap 是一款小巧使用的Mac屏幕录制软件,它以GIF格式来录制屏幕内容,用户可以自定帧率和录制范围.这样就能控制生成文件的大小,非常便捷实用哦.点击进入下载 <ignore_js_op ...
- C++学习之函数指针
C++学习之函数指针 和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...
- mina、netty消息边界问题(采用换行符)
在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息.理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次rea ...
- latex 常用小结
在写论文,甚至有些课程的报告的时候,latex是常用的工具.这篇博文简单的记录了latex常用的一些内容. 1 基本模块 没用过latex的读者,最想问的问题莫过于latex的 “hello worl ...
- maven打包成第三方jar包且把pom依赖包打入进来
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId& ...
- Java中的枚举类型详解
枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...
- System timers granularity
http://code.google.com/p/javasimon/wiki/SystemTimersGranularity
- d指针在Qt上的应用及实现(d指针能实现二进制兼容)
Qt为了使其动态库最大程度上实现二进制兼容,引入了d指针的概念.那么为什么d指针能实现二进制兼容呢?为了回答这个问题,首先弄清楚什么是二进制兼容?所谓二进制兼容动态库,指的是一个在老版本库下运行的程序 ...
- HDU 5446 Unknown Treasure(Lucas定理+CRT)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5446 [题目大意] 给出一个合数M的每一个质因子,同时给出n,m,求C(n,m)%M. [题解] ...
- HTML5入门(一)
HTML简单介绍: HTML(HyperText Markup Language),超文本标记语言,是一种专门用于创建web的超文本文档编程语言,是我们看到的网页的源代码. 版本简介: 1997年推出 ...