【基于栈的二叉树中序遍历】二叉树的中序遍历+栈,O(h)的时间复杂度
一般情况我们通常使用递归算法对二叉树进行中序遍历,模板如下:
void dfs(TreeNode *root){
if(!root)return;
dfs(root->left);
cout<<root->val<<endl;
dfs(root->right);
}
该算法的时间复杂度为O(n),若需要对二叉树进行随机存取,则需要使用数组对二叉树进行扁平化保存,空间复杂度为O(n)
在Leetcode 剑指offer中,了解到了一种二叉树中序遍历算法,该算法结合栈这一数据结构,将空间复杂度降至O(h),h是二叉树的高度。
具体算法如下:
int dfs(){
while(!cur){
sta.push(root);
root = root->left;
}
cur = sta.top();
int res = cur->val;
cur = cur->right;
return res;
}
那么该算法就能实现对于给定一个二叉树每调用一次该算法就能返回一个中序遍历的值。