我的C++数据结构学习笔记。
整理中
链表
链表实现
struct ListNode {
int val; // 当前节点的值
ListNode* next; // 指向下一个节点的指针
ListNode() : val(0), next(nullptr) {} // 构造函数,初始化当前结点值为0,指针为空
ListNode(int x) : val(x), next(nullptr) {} // 构造函数,初始化当前结点值为x,指针为空
ListNode(int x, ListNode* next) : val(x), next(next) {} // 构造函数,初始化当前结点值为x,指针非空
};
二叉树
二叉树实现
struct TreeNode {
int val; // 当前节点的值
TreeNode* left; // 左指针
TreeNode* right; // 右指针
TreeNode() : val(0), left(nullptr), right(nullptr) {} // 构造函数,初始化当前结点值为0,左右指针为空
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} // 构造函数,初始化当前结点值为x,左右指针为空
TreeNode(int x, TreeNode* left, TreeNode* right)
: val(x), left(left), right(right) {} // 构造函数,初始化当前结点值为x,左右指针非空
};
遍历方式
- 前序遍历(DLR):根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面;
- 中序遍历(LDR):根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面;
- 后序遍历(LRD):根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面;
// 前序遍历
void pre_order(TreeNode* Node) {
if (Node == nullptr) return;
std::cout << "Node Data: " << Node->data << std::endl;
pre_order(Node->left);
pre_order(Node->right);
}
// 中序遍历
void middle_order(TreeNode* Node) {
if (Node == nullptr) return;
middle_order(Node->left);
std::cout << "Node Data: " << Node->data << std::endl;
middle_order(Node->right);
}
// 后序遍历
void post_order(TreeNode* Node) {
if (Node == nullptr) return;
post_order(Node->left);
post_order(Node->right);
std::cout << "Node Data: " << Node->data << std::endl;
}
资料
教程
GitHub
- krahets/hello-algo
- cp-algorithms/cp-algorithms
- mandliya/algorithms_and_data_structures
- huaxz1986/cplusplus-_Implementation_Of_Introduction_to_Algorithms
- ShahjalalShohag/code-library
- rachitiitr/DataStructures-Algorithms
- jainaman224/Algo_Ds_Notes
- 0voice/algorithm-structure
- sachuverma/DataStructures-Algorithms
- br7roy/THU-DS
- HuyuYasumi/DSA_CPP_Deng