#include<stdio.h>
#include<stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct ListNode*createList(struct ListNode*p)
{
int i;
int s[] = {-10,-3,0,5,9};
struct ListNode*q = (struct ListNode*)malloc(sizeof(struct ListNode));
q = p;
q->val = s[0];
q->next = NULL;
for (i = 1; i < 5; i++)
{
struct ListNode*newnode =
(struct ListNode*)malloc(sizeof(struct ListNode));
newnode->val = s[i];
newnode->next = NULL;
q->next = newnode;
q = newnode;
}
return q;
}
struct ListNode*pr(struct ListNode*p)
{
printf("打印链表:\n");
struct ListNode*q = p;
while (q)
{
printf("%d\n",q->val);
q = q->next;
}
return q;
}
struct ListNode*getmid(struct ListNode*left, struct ListNode*right )
{
struct ListNode*fast = left;
struct ListNode*slow = left;
while (fast!=right && fast->next!=right )
{
fast = fast->next;
fast = fast->next;
slow = slow->next;
}
return slow;
}
struct TreeNode*createTree(struct ListNode* head, struct ListNode* right)
{
if (head == right)
return NULL;
struct ListNode*mid = getmid(head,right);
struct TreeNode*Tree = (struct TreeNode*)malloc(sizeof(struct TreeNode));
Tree->left = Tree->right = NULL;
Tree->val = mid->val;
Tree->left = createTree(head, mid);
Tree->right = createTree(mid->next,right);
return Tree;
}
struct TreeNode* sortedListToBST(struct ListNode* head)
{
return createTree(head,NULL);
}
struct TreeNode*printTree(struct TreeNode*t)
{
if (t==NULL)
{
return 0;
}
printTree(t->left);
printf("%d\n",t->val);
printTree(t->right);
}
struct TreeNode* sort(struct ListNode* head)
{
struct TreeNode*Tree = createTree(head, NULL);
printf("树建立成功\n");
printf("中序遍历打印此树:\n");
printTree(Tree);
return Tree;
}
int main()
{
ListNode a;
ListNode *x = &a;
createList(x);
pr(x);
sort(x);
}