File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed
Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change 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+ ```
You can’t perform that action at this time.
0 commit comments