단일 체인 테이블 구조에 따라 두 갈래로 트리 찾기 Convert Sorted List to Binary Search Tree

1292 단어
문제: Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
참조 가능한 자매 질문: 순서 그룹 구조에 따라 두 갈래로 트리 찾기 Convert Sorted Array to Binary Search Tree
사고방식: 두 갈래 찾기 나무의 구조는 종종 두 갈래 찾기 과정에 수반된다.이것은 수조가 아니라 단일 체인 시계다.2점은 찾기 어렵다.귀속시키세요.매번 체인 시계의 가장 중간 결점을 찾아 나무 뿌리 노드로 하고 좌우 양측을 좌우 아이로 한다.
/**
 * 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:
    TreeNode *sortedListToBST(ListNode *head) {
        if(head == NULL)
		    return NULL;
	    return fun(head, NULL);
    }

    TreeNode* fun(ListNode *head, ListNode *end)
    {
	    if(head == end)
	    	return NULL; 
	    	
	    ListNode *p,*mid;
	    p = mid = head;
	    while(p != end && p->next != end)
	    {
		    p = p->next->next;
		    mid = mid->next;
	    }
	    TreeNode *m = new TreeNode(mid->val);
	    m->left = fun(head, mid);
    	m->right = fun(mid->next, end);	
	
    	return m;
    }
};

좋은 웹페이지 즐겨찾기