leetcode 94 二叉树的中序遍历(非递归)
二叉树?中序遍历 题目: 给定一个二叉树,返回它的中序 遍历 例子: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 题目分析 中序遍历: 左子树 根节点 右子树 递归三行解决 非递归? 栈 保存节点信息 解题思路 变量 作用 stack<TreeNode*> s 保存节点信息 TreeNode* temp 表示当前访问节点 过程: 当s非空 取出栈顶元素作为当前节点 temp 栈顶元素出栈 如果当前节点的 右子树节点 非空 ==>入栈 (栈 先进后出 所以先将右子树节点入栈) 如果当前节点的 左子树节点 非空 ==> 1.当前节点temp重新入栈(这样遍历完左子树的时候可以再遍历回根节点) 2.当前左子树的节点入栈 3.将当前节点的 左右子树置为空 (再次遍历的时候就相当于没有左右子树 即根节点输出信息) 代码如下 class Solution { public: vector<int> inorderTraversal(TreeNode* root) { if (!root) return {}; stack<TreeNode*> s{{root}}; vector<int> ans; while(!s.empty()) { TreeNode* temp; temp = s.top(); s.pop(); if (temp->right) s