【树】94.二叉数的中序遍历
94.二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
中序遍历的概念
中序遍历就是先遍历左子树,然后访问根节点,然后遍历右子树。
递归实现
先左子树,然后root,最后右子树
vector<int> v;
vector<int> inorderTraversal(TreeNode* root) {
if(root != NULL) {
inorderTraversal(root->left);
v.push_back(root->val);
inorderTraversal(root->right);
}
return v;
}
迭代实现
思路:每到一个节点 A,因为根的访问在中间,将 A 入栈。然后遍历左子树,接着访问 A,最后遍历右子树。
在访问完 A 后,A 就可以出栈了。因为 A 和其左子树都已经访问完成。
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
vector<int> v;
TreeNode* rt = root;
while(rt || s.size()){
while(rt){
s.push(rt);
rt=rt->left;
}
rt=s.top();s.pop();
v.push_back(rt->val);
rt=rt->right;
}
return v;
}

浙公网安备 33010602011771号