IT袋

当前位置:主页 > 经验教程 > 建站编程 >

中序遍历非递归实现

中序遍历非递归实现 迭代

时间:2023-11-22 10:25:13 来源:IT袋 作者:马勇
导读:中序遍历非递归实现,跟大家分享中序遍历非递归实现的话题,接下来分享详细内容。 思路: 从根节点开始,一直访问左子树,同时将经过的节点入栈。 当左子树访问完毕(为空)时,弹出栈

中序遍历非递归实现

跟大家分享中序遍历非递归实现的话题,接下来分享详细内容。

思路:

  1. 从根节点开始,一直访问左子树,同时将经过的节点入栈。
  2. 当左子树访问完毕(为空)时,弹出栈顶元素,访问该节点,并转向其右子树,然后重复步骤1。
  3. 直到栈为空且当前节点为空时,遍历结束。

中序遍历非递归实现

参考代码:

#include <iostream>
#include <stack>
// 二叉树的节点结构
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void inorderTraversal(TreeNode* root) {
    std::stack<TreeNode*> nodeStack;
    TreeNode* current = root;
    while (current != nullptr || !nodeStack.empty()) {
        // 将左子树入栈
        while (current != nullptr) {
            nodeStack.push(current);
            current = current->left;
        }
        // 访问节点并转向右子树
        current = nodeStack.top();
        nodeStack.pop();
        std::cout << current->val << " "; // 访问节点
        current = current->right;
    }
}
int main() {
    // 构建一个二叉树
    TreeNode* root = new TreeNode(1);
    root->left = new TreeNode(2);
    root->right = new TreeNode(3);
    root->left->left = new TreeNode(4);
    root->left->right = new TreeNode(5);
    // 中序遍历
    std::cout << "Inorder Traversal: ";
    inorderTraversal(root);
    return 0;
}

本文分享的中序遍历非递归实现 迭代的详细讲解,仅供大家参考建议!

相关阅读

  • 常用认证机制有哪些 "常见的身份验证方式有哪些?"

    常用认证机制有哪些 "常见的身份验证方式有哪些?"

    为大家分享常用认证机制有哪些的话题,如有不对的地方欢迎指正! 1. HTTP Basic Auth HTTP Basic Auth : 是一种简单的登录认证方式,Web浏览器或其他客户端程序在请求时提供用户名和密码,通常用户

  • 公司网站如何建立 最新公司网页制作流程

    公司网站如何建立 最新公司网页制作流程

    您可能不了解公司网站如何建立和最新公司网页制作流程的介绍,接下来IT袋小编为大家介绍。 要建立自己的公司网站,可以按照以下步骤进行: 第一步、设定目标 确定您的网站的目标和定位

  • 虚拟化类型以及优缺点比较 虚拟化类型及其优缺点对比

    虚拟化类型以及优缺点比较 虚拟化类型及其优缺点对比

    正文核心导读:虚拟化类型以及优缺点比较的电脑小知识,具体详情如下: 1. 简介 虚拟化是一种将计算机硬件、操作系统、应用程序等资源进行抽象和隔离的技术。 虚拟化技术可以将一个物

  • 如何将VNF部署在NFVI上

    如何将VNF部署在NFVI上

    关于如何将VNF部署在NFVI上的IT知识,继续往下看吧! VNF的实现和部署是网络功能虚拟化(NFV)的核心。 在本文,我们将详细介绍如何将VNF部署在NFV基础设施(NFVI)上。 这个过程需要几个关键