给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,3,2]
(左根右)
1.若其左孩子不为空,则将p入栈并将p的左孩子置为当前的p,然后对当前结点p再进行相同的处理;
2.若其左孩子为空,则取栈顶元素(根)并进行出栈操作(没有左,则弹根),访问该栈顶结点,然后将栈顶结点的右孩子置为当前的p(对右边的子树作为root进行相同的操作)
3.直到p为null且栈为空则结束遍历
/**
* 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*> s;
vector<int> ret;
TreeNode* p=root;
while(p||!s.empty()){
//将左节点入栈,直到左节点为空
while(p!=NULL){
s.push(p);
p=p->left;
}
//将最后的左节点弹出并放入vector
TreeNode* cur=s.top();
s.pop();
ret.push_back(cur->val);
//将右节点作为root 进行相同的操作
p=cur->right;
}
return ret;
}
};