有序链表

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

    #官网下载 http://pecl.php.net/package/xhprof tar zxf xhprof-0.9.2.tgz   cd xhprof-0.9.2/extension/   sud ...

  2. WPF中常用控件的属性

    Source = new BitmapImage( new Uri( WangCaiConfig.GetCurrentDirectory() + imgStr, UriKind.RelativeOrA ...

  3. 整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用

    整理部分JS 控件  WEB前端常用的做成Jsp项目,方便今后直接用 最近又没时间了,等用时间了,再加入更多的, 源码下载: http://download.csdn.net/detail/liang ...

  4. SQL1-(增删改查、常用函数)

    USE flowershopdb --全球唯一标识符(GUID UUID) SELECT NEWID() --增删改查 --INSERT [INTO] <表名> [列名] VALUES & ...

  5. Java常用类库--观察者设计模式( Observable类Observer接口)

    如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口. import java.util.* ; class House extends Obse ...

  6. Java 根据comboBox选择结果显示JTable

    处理这样的问题的主要思路是:     对于JTable,JTree等Swing控件,都有一个对应的Model用来存储数据,JTable对应的有一个DefaultTableModel.     Defa ...

  7. telnet登陆路由器。。。

    登陆路由有两种方式.一种是console,还有一种是使用telnet,由于我电脑是win7,不支持console.也懒得装软件,就使用telnent为例. 一.开启telnetclient 对于XP. ...

  8. Android 匿名共享内存C接口分析

    在Android 匿名共享内存驱动源码分析中详细分析了匿名共享内存在Linux内核空间的实现,虽然内核空间实现了匿名共享内存,但仍然需要在用户空间为用户使用匿名共享内存提供访问接口.Android系统 ...

  9. 九度OnlineJudge之1012:畅通工程

    题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路 ...

  10. 关于js封装框架类库之选择器引擎(二)

    在上篇介绍了选择器的获取标签.id.类名的方法,现在我们在上篇基础上继续升级 1.问题描述:上篇get('选择器')已经实现,如果get方法里是一个选择器的父元素,父元素是DOM对象,那么如何获取元素 ...