网址:https://leetcode.com/problems/binary-tree-inorder-traversal/
二叉树的遍历一般有两种办法:递归、通过栈进行迭代。
递归的代码十分简单,这里就不再赘述。
中序遍历迭代遍历算法:
- 遇到一个节点,就把它圧栈,并去遍历它的左子树
- 当左子树遍历结束后,从栈顶弹出这个节点并访问它
- 然后再去中序遍历它的右子树
/** * 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) { vector<int> ans; stack<TreeNode*> temp; while( root || !temp.empty()) { while(root) { temp.push(root); root = root->left; } if(!temp.empty()) { root = temp.top(); temp.pop(); ans.push_back(root->val); root = root->right; } } return ans; } };