二叉树的中序遍历

function inorderTraversal(root):
    result = empty list  // 创建一个空列表来存储结果
    stack = empty stack  // 创建一个空栈来辅助遍历
    current = root  // 当前节点指向根节点

    while current is not null or stack is not empty:  // 当当前节点不为空或者栈不为空时循环执行
        while current is not null:  // 当当前节点不为空时循环执行
            push current into stack  // 将当前节点压入栈中
            current = current's left child  // 移动到当前节点的左子节点

        current = top element of stack  // 取栈顶元素作为当前节点
        pop stack  // 弹出栈顶元素
        add current's value to result  // 将当前节点值加入结果列表
        current = current's right child  // 移动到当前节点的右子节点

    return result  // 返回结果列表
#include <iostream>
#include <vector>
#include <stack>
using namespace std;

// Definition for a binary tree node.
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;  // 存储中序遍历结果的向量
        stack<TreeNode*> st;  // 辅助遍历的栈
        TreeNode* current = root;  // 当前节点指针

        // 当当前节点不为空或者栈不为空时循环执行
        while (current != nullptr || !st.empty()) {
            // 当当前节点不为空时循环执行
            while (current != nullptr) {
                st.push(current);  // 将当前节点压入栈中
                current = current->left;  // 移动到当前节点的左子节点
            }
            current = st.top();  // 取栈顶元素作为当前节点
            st.pop();  // 弹出栈顶元素
            result.push_back(current->val);  // 将当前节点值加入结果向量
            current = current->right;  // 移动到当前节点的右子节点
        }

        return result;  // 返回中序遍历结果向量
    }
};

int main() {
    // 创建一个二叉树
    TreeNode* root = new TreeNode(1);
    root->right = new TreeNode(2);
    root->right->left = new TreeNode(3);

    // 执行中序遍历
    Solution sol;
    vector<int> inorder = sol.inorderTraversal(root);

    // 输出结果
    cout << "Inorder traversal result: ";
    for (int val : inorder) {
        cout << val << " ";
    }
    cout << endl;

    // 释放内存
    delete root->right->left;
    delete root->right;
    delete root;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值