欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode刷题(117)~二叉树的中序遍历【递归|迭代】

程序员文章站 2022-06-17 19:53:30
...

题目描述

给定一个二叉树,返回它的中序 遍历。

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

解答 By 海轰

提交代码(递归)

vector<int> ans;
    vector<int> inorderTraversal(TreeNode* root) {
        if(root!=NULL)
        {
            if(root->left!=NULL)
            inorderTraversal(root->left);
            ans.push_back(root->val);
            if(root->right!=NULL)
            inorderTraversal(root->right);
        }
        return ans;
    }

运行结果
LeetCode刷题(117)~二叉树的中序遍历【递归|迭代】
提交代码(递归 辅助函数版)

void help(TreeNode* root,vector<int> &ans)
    {
        if(root!=NULL)
        {
            if(root->left!=NULL)
            help(root->left,ans);
            ans.push_back(root->val);
            if(root->right!=NULL)
            help(root->right,ans);
        }
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> ans;
        help(root,ans);
        return ans;
    }

运行结果
LeetCode刷题(117)~二叉树的中序遍历【递归|迭代】
提交代码(迭代)

vector<int> inorderTraversal(TreeNode* root) {
        vector<int> ans;
        stack<TreeNode*> s;
        TreeNode* temp=root;
        while(temp!=NULL||!s.empty())
        {
            while(temp!=NULL)
            {
                s.push(temp);
                temp=temp->left;
            }
            temp=s.top();
            ans.push_back(temp->val);
            s.pop();
            temp=temp->right;
        }
        return ans;
    }

运行结果
LeetCode刷题(117)~二叉树的中序遍历【递归|迭代】

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal

相关标签: 算法 leetcode