使用 Bool 标记法实现 C++ 中统一风格的二叉树迭代遍历及其在 Unity 游戏开发中的用途

一、Bool 标记法的原理(模拟递归)

原理解释:

使用栈 + bool 标记记录当前节点是否被“访问过”。

我们将“访问”的定义拆分为两次:

  • 第一次:只入栈,暂不处理。
  • 第二次:说明其左(或右)子树已处理完,可以正式访问(输出)。
stack<pair<TreeNode*, bool>> st;

每次弹出时,如果 visited == false,就继续压入子节点;
如果 visited == true,才处理 node->val


二、统一遍历模板结构

vector<int> traversal(TreeNode* root) {
   
    vector<int> res;
    stack<pair<TreeNode*, bool>> st;
    if (root) st.push({
   root, false});

    while (!st.empty()) {
   
        auto [node, visited] = st.top(); // C++17 结构化绑定特性  
        st.pop();
        if (!node) continue;

        if (visited) {
   
            res.push_back(node->val); // 只有第二次访问才输出
        } else {
   
            // 下面根据遍历方式调整顺序
        }
    }

    return res;
}

三、实现三种遍历(只改压栈顺序)

1️⃣ 前序遍历(根→左→右)

// 根 -> 左 -> 右
if (node->right) st.push({
   node->right, false});
if (node

你可能感兴趣的:(c++,unity,算法)