有序链表

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. VB.NET中vbcr 是回车、vbcrlf 是回车和换行的结合、vblf 是换行

    cr 是回车,是到本行的头部 lf 是换行,是到下一行 crlf 是到下一行的头部 vbcrlf=vbcr   &   vblf Windows     一般使用vbcrlf换行 Unix   ...

  2. 大数据之scala基本语法学习

    package edu.snnu.test object list2 { //把字符串转化成一个char类型的list "99 Red Balloons".toList //> ...

  3. JSONObject put accumulate element 方法区别-------java中

    1.public Object put (Object key, Object value) 将value映射到key下.如果此JSONObject对象之前存在一个value在这个key下,当前的va ...

  4. Problem F: Exponentiation大数求幂

    DescriptionProblems involving the computation of exact values of very large magnitude and precision ...

  5. nginx proxy_pass 后面的斜杠

    # add / location /app/ { proxy_pass http://$backend/; } # location /app/ { proxy_pass http://$backen ...

  6. 用python 10min手写一个简易的实时内存监控系统

    简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...

  7. nyoj 21三个水杯(BFS + 栈)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 思想: 看了一下搜索就来写了这题(BFS 找出最短路径 所以用此来进行搜索) 这题在 ...

  8. 动态更换view类的背景----StateListDrawable的应用

    StateListDrawable可以根据View的不同状态,更换不同的背景 可以应用如EditText,Button等中,以Button为例 系统中默认的按钮被按下的颜色和未点击时的颜色不一样,该种 ...

  9. php获取apk信息

    使用方法如下: <?php require('apk_parser.php'); $p = new ApkParser(); /* if($argc<2) { echo "usa ...

  10. github中的ssh配置

    1.配置git信息 设置git的user name和email: $ git config --global user.name "tigerjibo"$ git config - ...