class Solution {
public:
vector<int> Traversal(TreeNode* root) {
vector<int> res;
stack<pair<TreeNode*, bool>> st; //存储节点和访问标志的栈。
pair<TreeNode*, bool> cur = {root, false}; //当前处理的节点以及其访问标志, true:准备访问, false:未访问
if(!cur.first) return res;
st.push(cur);
while(!st.empty()){
cur = st.top(); //取当前节点
st.pop();
if(cur.second == true){ //访问节点
res.push_back(cur.first->val);
}else{ //准备节点
//先序遍历
if(cur.first->right) st.push({cur.first->right, false});
if(cur.first->left) st.push({cur.first->left, false});
st.push({cur.first, true});
//中序遍历
if(cur.first->right) st.push({cur.first->right, false});
st.push({cur.first, true});
if(cur.first->left) st.push({cur.first->left, false});
//后续遍历
st.push({cur.first, true});
if(cur.first->right) st.push({cur.first->right, false});
if(cur.first->left) st.push({cur.first->left, false});
}
}
return res;
}
};
二叉树非递归前中后序遍历 C++ 实现
最新推荐文章于 2024-09-21 19:25:16 发布
该代码段定义了一个Solution类,包含一个Traversal函数,用于使用栈进行二叉树的遍历。函数接受一个TreeNode指针作为根节点,返回一个整数向量,包含了按照前序、中序和后序顺序遍历得到的节点值。遍历过程中,使用了一个pair来存储节点和访问状态,确保了正确地遍历所有节点。
摘要由CSDN通过智能技术生成