LeetCode(109)Covert Sorted List to Binary Search Tree
テーマ
Gven a singly linked list where elemens are sorted in ascending order,convert it to a height balanced BST.
分析
順序チェーンテーブルを指定して、バランスのとれた二叉ルックアップツリーを構築します.
上の問題の本質と同じです.ただ違ったデータ構造を採用しています.この問題はチェーンブロックの節点を正確に求めて、ルートノードの位置を計算して、右側のサブリンクを正しく分割することにあります.
注意:ポインタ処理は、空のポインタ参照が現れないようにしてください.
ACコード
Gven a singly linked list where elemens are sorted in ascending order,convert it to a height balanced BST.
分析
順序チェーンテーブルを指定して、バランスのとれた二叉ルックアップツリーを構築します.
上の問題の本質と同じです.ただ違ったデータ構造を採用しています.この問題はチェーンブロックの節点を正確に求めて、ルートノードの位置を計算して、右側のサブリンクを正しく分割することにあります.
注意:ポインタ処理は、空のポインタ参照が現れないようにしてください.
ACコード
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
/** * Definition for a binary tree node. * 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;
int size = 0;
ListNode *p = head;
while (p)
{
++size;
p = p->next;
}
ListNode *l = head, *r = NULL;
// ,
ListNode *pre = head;
p = head;
int i = 0;
while (p && i < size / 2)
{
pre = p;
p = p->next;
++i;
}
//p
TreeNode *root = new TreeNode(p->val);
//
r = p->next;
//
if (pre->next == p)
pre->next = NULL;
else
l = NULL;
root->left = sortedListToBST(l);
root->right = sortedListToBST(r);
return root;
}
};
GitHubテストプログラムのソースコード