Skip to content

Commit 5bf8f26

Browse files
committed
二叉平衡树~~~有序数组和有序链表,自上而下和自下而上的两种思想
1 parent 97d5f20 commit 5bf8f26

File tree

2 files changed

+58
-25
lines changed

2 files changed

+58
-25
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//递归思想很好做~注意返回空
2+
3+
class Solution {
4+
TreeNode * dfs(int start,int end,vector<int> &num)
5+
{
6+
if(start <= end)
7+
{
8+
int mid = (start + end) / 2;
9+
TreeNode *newNode = new TreeNode(num[mid]);
10+
newNode->left = dfs(start,mid - 1,num);
11+
newNode->right = dfs(mid + 1,end,num);
12+
return newNode;
13+
}
14+
else
15+
return NULL;
16+
}
17+
18+
public:
19+
TreeNode *sortedArrayToBST(vector<int> &num) {
20+
if(num.size() < 1)
21+
return nullptr;
22+
return dfs(0,num.size()-1,num);
23+
24+
}
25+
};
26+
// 自顶向下也可以做,较麻烦,下面是自下而上的来做,注意参数,
27+
28+
class Solution {
29+
private:
30+
TreeNode *bottomToUP(ListNode *&root,int start,int end) // 注意那个地址传值
31+
{
32+
if(start <= end)
33+
{
34+
int mid = start + (end - start) / 2 ;
35+
TreeNode *leftChild = bottomToUP(root,start,mid-1);
36+
TreeNode *parent = new TreeNode(root->val);
37+
root = root->next;
38+
parent->left = leftChild;
39+
parent->right = bottomToUP(root,mid+1,end);
40+
return parent;
41+
}
42+
else
43+
return NULL;
44+
}
45+
46+
public:
47+
TreeNode *sortedListToBST(ListNode *head) {
48+
ListNode *p = head;
49+
int len=0;
50+
while(p)
51+
{
52+
p = p->next;
53+
++len;
54+
}
55+
return bottomToUP(head,0,len - 1);
56+
57+
}
58+
};

Binary-Tree/Convert Sorted Array to Binary Search Tree

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)