94. 二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。
示例:
输入:
[1,null,2,3] 1 2 / 3 输出:
[1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { vector<int>res; public: vector<int> inorderTraversal(TreeNode* root) { stack<pair<int,TreeNode*> >s; s.push(pair(0,root)); //先把根节点压入 0代表没被访问过 1代表已经访问过 while(!s.empty()){ int color=s.top().first; TreeNode* t=s.top().second; s.pop(); if(!t)continue; //避免空指针 if(color==0){ //如果当前节点没被访问过 s.push(pair(0,t->right)); //中序遍历是左中右 先把右压入栈,这样他就在下边 s.push(pair(1,t)); //不可以直接放到最终数组,因为访问其他节点还要用到。 s.push(pair(0,t->left)); //倒序压入到栈里 }else res.push_back(t->val); //若已经被访问过,就把结果放到最终数组里 } return res; } };