方法一:
递归调用:
方法二:
迭代:
二叉树的非递归遍历,主要的思想是使用栈(Stack)来进行存储操作,记录经过的节点。
or:
c++:
ref: https://hit-alibaba.github.io/interview/basic/algo/Tree.html
vector<int> preorderTraversal(TreeNode* root) {
TreeNode *p = root;
vector<int> result;
if (!p) {
return result;
}
stack<TreeNode *> q;
while (p || !q.empty()) {
if (p) {
result.push_back(p->val);
q.push(p);
p = p->left;
}
else {
p = q.top();
q.pop();
p = p->right;
}
}
return result;
}