首先来看下 recursive 的版本:
void inorder(TreeNode* node) {
if (node != NULL) {
inorder(node->left); //左子树
print(node->val); //当前节点
inorder(node->right); //右子树
}
}
如何将此版本转化成iterative的?
1. 参考Inorder Binary Tree Traversal (Iteratively)
说白了就是跑一遍程序,看看它是如何运行的。
比如
5
/ \
3 7
/ \ / \
1 4 6 8
中序:1,3,4,5,6,7,8
用TreeNode *p来代表当前处理的node。bool done代表是否完成。
如果当前节点p不为空,处理其左子树