题解 | #二叉树的中序遍历#
二叉树的中序遍历
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); } };
非递归的思路就是,先把自己扔进去,然后往左走,如果走到头,就把自己打印,然后往右走。注意只扔根节点,取出根节点后才往右走,所以不需要把右节点放到栈里。