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


    #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;
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    推荐系统相关知识
    关于hive核心
    关于hive的基础
    立个flag
    关于数据增强——文本增强
    .NET Core 实践:事件通知和异步处理
    .NET Core 实践:微服务架构的优点
    C#一定比C++性能差?当然不!破除迷信,从我做起!
    Visual Studio Code 搭配 Docker 一键搭建golang开发环境
    单例双重检查引发的资源竞争/数据竞争
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4785455.html
Copyright © 2020-2023  润新知