有序链表

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++ 递归创建平衡二叉查找树的更多相关文章

  1. 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 ...

  2. Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树

    [抄题]: Given an array where elements are sorted in ascending order, convert it to a height balanced B ...

  3. Leetcode: Convert sorted list to binary search tree (No. 109)

    Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...

  4. [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 ...

  5. [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. 这道 ...

  6. 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 ...

  7. [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 ...

  8. 【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 ...

  9. 【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 ...

随机推荐

  1. spring mvc 非注解形式

    目录(?)[+] webxml配置文件 注如果使用注解可以加上-- servlet上下文配置文件 test-servletxml 实体类Empjava StartController控制器 控制器Em ...

  2. ubuntu下浏览器调用本地应用程序

    ubunut下浏览器调用本地应用程序需要desktop文件和scheme协议的支持,和windows 的url protocol类似,只是注册协议的方式不一样. 首先是desktop文件,里面需要加入 ...

  3. <a>元素生成多个<a>的问题,元素标签结尾影响

    告诉我不是真的吧,<a/>和<a></a>真的有区别...

  4. .Net跨平台中遇到的问题小结

    一:创建MVC网站,需要修改Views视图文件夹下的Web.config 二:需要添加web.config中的 <system.web> <compilation debug=&qu ...

  5. java新特性之可变参数

    public class NewDemo01 {     public static void main(String[] args) {         System.out.print(" ...

  6. jQuery数据缓存data(name, value)详解及实现

    一. jQuery数据缓存的作用 jQuery数据缓存的作用在中文API中是这样描述的:“用于在一个元素上存取数据而避免了循环引用的风险”.如何理解这句话呢,看看我下面的举例,不知道合不合适,如果你有 ...

  7. 基于KVM建立虚拟机的步骤及总结说明

    1.前言 目前正在涉足云计算IaaS工作,虚拟化是IaaS的重要部分,因此这段时间对各个虚拟机化技术和工具进行研究,研究的目的不仅仅是为了会使用这个工具,而是通过研究了解技术的实现机制和原理,即知其然 ...

  8. Delphi XE的RTTI增强,动态Hook某些内部事件

    Delphi2010之后的RTTI做了很大休整,现在用起来很爽了哦.甚至可以获取某些类的内部私有单元,然后为其赋值!讲这个RTTI增强的,可以参考网上的多个博客内容,我列举一下: Delphi2010 ...

  9. c语言中-----分配内存函数

    原型: void * realloc(void *p, size_t  size); realloc 可以对给定的指针所指的空间进行扩大 或者 缩小, 原有内存的数据保持不变.当然,对于缩小,则缩小部 ...

  10. 我的一个关于RFID的项目总结

    去年做的一个项目,今天在这里想总结一下,这是主要流程: [0]RFID(Reader)---->[1]网络---->[2]接收处理程序---->[3]队列---->[4]读/存 ...