给定一个二叉树,返回它的中序 遍历。
示例:
输入: [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 {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> stack1; // 在这里我们首先开一个 stack 来保存数据
vector<int> result;
auto p =root;
while(p || stack1.size() ){ // 当 p 为空或者 sack1 中有数据的时候
while(p){
stack1.push(p);// 在这里我们首先把数据保存下来
p = p->left;// 在这里我们首先把最左边的一个分支数据保存起来,然后进行数据的分析
}
p = stack1.top();// 取出栈顶元素
stack1.pop();// 删除栈顶元素
result.push_back(p->val);//保存一下数据
p =p->right; //在这里这一步很重要啊,如果它没有 右子树的话,那么我们就不会进入下一轮的数据循环
}
return result;
}
};
// 加油加油。。。 Try to make yourself more excellent...