zoukankan      html  css  js  c++  java
  • Convert Sorted List to Binary Search Tree

    Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

    思路:把一个排好序的链表转化为平衡二叉树。这道题主要是递归做法,每次找到中间结点,将其作为根结点,然后递归左右子链表,依次找到左右直接点,这样就可以建造一棵平衡二叉树了。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int ListLength(ListNode *head)
        {
            int len=0;
            while(head)
            {
                head=head->next;
                len++;
            }
            return len;
        }
        TreeNode *createBST(ListNode *head,int left,int right)
        {
            if(left>right)
                return NULL;
            int mid=(left+right)>>1;
            ListNode *cur=head;
            for(int i=left;i<mid;i++)
                cur=cur->next;
            TreeNode *leftTree=createBST(head,left,mid-1);
            TreeNode *rightTree=createBST(cur->next,mid+1,right);
            TreeNode *root=new TreeNode(cur->val);
            root->left=leftTree;
            root->right=rightTree;
            return root;
        }
        TreeNode *sortedListToBST(ListNode *head) {
            if(head==NULL)
                return NULL;
            int len;
            len=ListLength(head);
            return createBST(head,0,len-1);
        }
    };
  • 相关阅读:
    TCP断开连接的相关问题
    TCP建立连接的相关问题
    TCP的基本认识
    输入网址到网页显示,发生了什么
    leetcode_32.最长有效括号
    第六章:HTTP首部
    第五章:与HTTP协作的Web服务器
    RDF、RDFS、OWL
    分布式事务
    第四章:返回结果的HTTP状态码
  • 原文地址:https://www.cnblogs.com/awy-blog/p/3672318.html
Copyright © 2011-2022 走看看