C++ 使用栈实现中序遍历二叉树

news/2025/4/1 4:30:00/

#include <stack>
#include "iostream"
using namespace std;

// 假设二叉树节点定义如下
struct TreeNode {
    int value;
    TreeNode* left;
    TreeNode* right;

    TreeNode(int val) : value(val), left(nullptr), right(nullptr) {}
};

typedef TreeNode* BinTree;

void InOrder(BinTree T) {
    stack<BinTree> stack;
    BinTree current = T;

    while (current != nullptr || !stack.empty()) {
        // 不断访问左子节点,直到没有左子节点为止,沿途将节点压入栈中
        while (current != nullptr) {
            stack.push(current);
            current = current->left;
        }

        // 弹出栈顶元素并访问它
        current = stack.top();
        stack.pop();
        cout << current->value << " "; // 访问当前节点

        // 转向访问右子树
        current = current->right;
    }
}

// 示例:如何使用 InOrder 函数
int main() {
    // 构建一个简单的二叉树
    //       1
    //      / \
    //     2   3
    //    / \
    //   4   5
    BinTree 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);

    InOrder(root); // 输出: 4 2 5 1 3

    return 0;
}


http://www.ppmy.cn/news/1583201.html

相关文章

thinkphp8.0\swoole的websocket应用

环境&#xff1a;centOS7.9、php8.3、thinkphp8.0\think-swoole4.1 我用的官方think-swoole插件 第一步&#xff1a;根据官方文档&#xff0c;需要安装此扩展插件 composer require topthink/think-swoole 第二步&#xff1a;在根目录下config文件夹下编辑swoole.php配置文…

适合各个层次的 7 个计算机视觉项目【1】:植物病害检测

植物病害检测 植物病害检测是计算机视觉在农业领域的一个重要应用。您将学习如何加载、处理和扩充数据集&#xff0c;构建深度神经网络模型&#xff0c;并在数据集上训练模型。该项目有助于理解图像分类&#xff0c;并通过实现早期病害检测为可持续农业做出贡献。 import os…

清晰易懂的 C++ 开发环境搭建教程

一、安装 C 编译器&#xff08;三大平台全覆盖&#xff09; 1. Windows 系统 方案一&#xff1a;MinGW-w64&#xff08;轻量推荐&#xff09; 下载 MinGW-w64&#xff1a; 访问 MinGW-w64 官网 → 下载 mingw-w64-install.exe。 安装配置&#xff1a; 架构选择&#xff1a;x…

form 表单内容序列化成一个字符串

html <form id"form1" action"http://localhost:8080/xxx" method"post"> <p >关键字1&#xff1a; <input type "text" name"keyword1" /></p> <p >关键字2&#xff1a; <input t…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…

Android adb自身调试log开关

本文介绍下如何打开adb源码中的debug log 1.adb源码log是可以动态打开和关闭的&#xff0c;控制逻辑代码如下 static NoDestructor<std::mutex> log_mutex; static NoDestructor<CachedProperty> log_property GUARDED_BY(log_mutex)("debug.adbd.logging&q…

高校校园交友微信小程序的设计与实现【lw+源码+部署+讲解】

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;ssm 前端技术&#xff1a;JavaScript、Vue 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JDK版本&#…