1. 链表
struct ListNode{int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode *next) : val(x), next(next) {}}
2. 二叉树
前序遍历
class Solution {public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> result;st.push(root);while (!st.empty()) {TreeNode* node = st.top(); // 中st.pop();if (node != NULL) result.push_back(node->val);else continue;st.push(node->right); // 右st.push(node->left); // 左}return result;}};
中序遍历
class Solution {public:vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> st;TreeNode* cur = root;while (cur != NULL || !st.empty()) {if (cur != NULL) { // 指针来访问节点,访问到最底层st.push(cur); // 讲访问的节点放进栈cur = cur->left; // 左} else {cur = st.top(); // 从栈里弹出的数据,就是要处理的数据(放进result数组里的数据)st.pop();result.push_back(cur->val); // 中cur = cur->right; // 右}}return result;}};
后序遍历
class Solution {public:vector<int> postorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> result;st.push(root);while (!st.empty()) {TreeNode* node = st.top();st.pop();if (node != NULL) result.push_back(node->val);else continue;st.push(node->left); // 相对于前序遍历,这更改一下入栈顺序st.push(node->right);}reverse(result.begin(), result.end()); // 将结果反转之后就是左右中的顺序了return result;}};
- 翻转二叉树
3. xxxx
