【刷题日记】二叉树-统一迭代法遍历-L94、144、145 Chen Shi 刷题日记二叉树 刷题日记 二叉树 发布于:2024年8月21日 字数:467 字 时长:2 分钟 二叉树的统一迭代法遍历。 思路 将访问的节点放入栈中,把要处理的节点也放入栈中但是要做标记:要处理的节点放入栈之后,紧接着放入一个空指针作为标记。 学习点 代码 前序遍历: 123456789101112131415161718192021222324class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> result; stack<TreeNode*> st; if (root != NULL) st.push(root); while (!st.empty()) { TreeNode* node = st.top(); if (node != NULL) { st.pop(); if (node->right) st.push(node->right); // 右 if (node->left) st.push(node->left); // 左 st.push(node); // 中 st.push(NULL); } else { st.pop(); node = st.top(); st.pop(); result.push_back(node->val); } } return result; }}; 中序遍历: 1234567891011121314151617181920212223242526class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int> result; stack<TreeNode*> st; if (root != NULL) st.push(root); while (!st.empty()) { TreeNode* node = st.top(); if (node != NULL) { st.pop(); // 将该节点弹出,避免重复操作,下面再将右中左节点添加到栈中 if (node->right) st.push(node->right); // 添加右节点(空节点不入栈) st.push(node); // 添加中节点 st.push(NULL); // 中节点访问过,但是还没有处理,加入空节点做为标记。 if (node->left) st.push(node->left); // 添加左节点(空节点不入栈) } else { // 只有遇到空节点的时候,才将下一个节点放进结果集 st.pop(); // 将空节点弹出 node = st.top(); // 重新取出栈中元素 st.pop(); result.push_back(node->val); // 加入到结果集 } } return result; }}; 后序遍历: 1234567891011121314151617181920212223242526class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int> result; stack<TreeNode*> st; if (root != NULL) st.push(root); while (!st.empty()) { TreeNode* node = st.top(); if (node != NULL) { st.pop(); st.push(node); // 中 st.push(NULL); if (node->right) st.push(node->right); // 右 if (node->left) st.push(node->left); // 左 } else { st.pop(); node = st.top(); st.pop(); result.push_back(node->val); } } return result; }}; 最后更新于:2025年1月18日 C++ 刷题 二叉树 C++ 刷题 二叉树 【刷题日记】二叉树-二叉树的层序遍历-L102-Medium 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 思路 层序遍历使用队列。题目需要按照不同层来输出,因此使用 pair 来组合 TreeN... 【刷题日记】二叉树-中序遍历-L94-Easy 给你二叉树的根节点 root ,返回它节点值的 中序 遍历。 思路 递归法。 迭代法。 学习点 迭代法需要特殊处理。需要额外定义一个指针指向正在处理的节点,否则在回溯节点的时候,会重复...