题解 | #二叉树的中序遍历#
二叉树的中序遍历
https://www.nowcoder.com/practice/0bf071c135e64ee2a027783b80bf781d
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
#include <stack>
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型vector
*/
vector<int> inorderTraversal(TreeNode* root) {
// write code here
vector<int> order;
stack<TreeNode*> Node;
int tmproot;
while(root!=nullptr||!Node.empty()){
if(root!=nullptr){
Node.push(root);
root = root->left;
}
else{
root = Node.top();
Node.pop();
order.push_back(root->val);
root = root->right;
}
}
return order;
}
private:
void inorder(vector<int> &order, TreeNode* root){
if(root == nullptr)
return;
inorder(order,root->left);
order.push_back(root->val);
inorder(order,root->right);
}
};
非递归的思路就是,先把自己扔进去,然后往左走,如果走到头,就把自己打印,然后往右走。注意只扔根节点,取出根节点后才往右走,所以不需要把右节点放到栈里。
查看1道真题和解析