Skip to content

Commit 4bd3a7e

Browse files
authored
Create 6.3.6不平衡二叉搜索树.md
1 parent f0ae7b3 commit 4bd3a7e

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

6.3.6不平衡二叉搜索树.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
- 问题:给定一颗不平衡二叉搜索树,左子树中的节点数比右边更多,重新组织树结构以改善其平衡性,同时保持二叉搜索树的特性
2+
- 思路:
3+
- 对树做一个右旋转。
4+
5+
```cpp
6+
#include <iostream>
7+
#include <algorithm>
8+
using namespace std;
9+
10+
struct TreeNode{
11+
int value;
12+
TreeNode* lChild;
13+
TreeNode* rChild;
14+
TreeNode(int val) : value(val), lChild(nullptr), rChild(nullptr) {}
15+
};
16+
17+
TreeNode* RotateRight(TreeNode* oldRoot){
18+
TreeNode* newRoot = oldRoot->lChild;
19+
oldRoot->lChild = newRoot->rChild;
20+
newRoot->rChild = oldRoot;
21+
return newRoot;
22+
}
23+
24+
void PreorderTraversal(TreeNode* root){
25+
if(root == nullptr){
26+
return;
27+
}
28+
cout << root->value << " ";
29+
PreorderTraversal(root->lChild);
30+
PreorderTraversal(root->rChild);
31+
}
32+
33+
TreeNode* GetTree4(){
34+
// 创建一个简单的二叉树
35+
TreeNode* root = new TreeNode(6);
36+
root->lChild = new TreeNode(4);
37+
root->rChild = new TreeNode(7);
38+
39+
root->lChild->lChild = new TreeNode(2);
40+
root->lChild->rChild = new TreeNode(5);
41+
42+
root->lChild->lChild->lChild = new TreeNode(1);
43+
root->lChild->lChild->rChild = new TreeNode(3);
44+
45+
return root;
46+
}
47+
48+
int main(){
49+
TreeNode* root = GetTree4();
50+
PreorderTraversal(root);
51+
cout << endl;
52+
53+
TreeNode* newRoot = RotateRight(root);
54+
PreorderTraversal(newRoot);
55+
return 0;
56+
}
57+
```

0 commit comments

Comments
 (0)