【leetcode】【单链表】【109】Convert Sorted List to Binary Search Tree

来源:互联网 发布:淘宝流量和访客怎么刷 编辑:程序博客网 时间:2024/05/22 04:46
#include<iostream>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* inorderTraversal(ListNode* &head, int start, int end){ //中序遍历if (start > end)return NULL;int mid = start + (end - start) / 2;TreeNode* left = inorderTraversal(head, start, mid - 1);TreeNode* root = new TreeNode(head->val);root->left = left;head = head->next;root->right = inorderTraversal(head, mid + 1, end);return root;}TreeNode* sortedListToBST(ListNode* head) {int numOfNodes = 0;ListNode* cur = head;while (cur){++numOfNodes;cur = cur->next;}return inorderTraversal(head, 0, numOfNodes - 1);}ListNode* createList(ListNode* head){int numOfNode;int value;cout << "please input number of listNode:";cin >> numOfNode;cin >> value;head = new ListNode(value);ListNode* cur = head;for (int i = 1; i < numOfNode; ++i){cin >> value;ListNode* temp = new ListNode(value);cur->next = temp;cur = temp;}//cur->next = head;return head;}void printNode(ListNode* head){ListNode* cur = head;while (cur){cout << cur->val << " ";cur = cur->next;}cout << endl;}};void inorder(TreeNode* node){if (node){inorder(node->left);cout << node->val << " ";inorder(node->right);}}int main(){ListNode* head = NULL;Solution lst;head = lst.createList(head);lst.printNode(head);TreeNode* root = lst.sortedListToBST(head);if(root){inorder(root);cout << endl;}else{cout << "empty tree" << endl;}system("pause");return 0;}


0 0
原创粉丝点击