总结二叉树的非递归实现:
- 先序遍历——采用栈和一个辅助指针,不断访问节点,并将左侧节点入栈,然后出栈访问右侧节点
- 中序遍历——采用栈和一个辅助指针,将左侧节点入栈,然后访问中间节点,最后再入栈右侧节点
- 后序遍历——最难的一个,采用栈和两个辅助指针,其中有一个辅助指针记录上一个访问的节点,如果是当前节点的右子节点,则访问当前节点
中序遍历如下:
// // Created by jt on 2020/8/23. // #include <vector> #include <stack> using namespace std; class Solution { public: /** * * @param root TreeNode类 * @return int整型vector */ vector<int> inorderTraversal(TreeNode *root) { // write code here vector<int> res; if (!root) return res; stack<TreeNode *> st; TreeNode *p = root; while (!st.empty() || p) { while (p) { st.push(p); p = p->left; } if (!st.empty()) { TreeNode *node = st.top(); st.pop(); res.push_back(node->val); p = node->right; } } return res; } };