前序遍历:
Code1:
vector<int> preorderTraversal(TreeNode* root) { // 前序遍历.
vector<int> retvec;
stack<TreeNode*> stk;
while (root != NULL || !stk.empty()) {
while (root != NULL) {
retvec.push_back(root->val); // 首次碰到 root, 就将其"输出"
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
root = root->right;
}
}
Code2
使用栈实现 DFS 应用到二叉树就是前序遍历的结果.
class Solution { // DFS的非递归版本
public:
vector<int> DFSTraversal(TreeNode* root) {
vector<int> vec;
stack<TreeNode*> stk;
stk.push(root);
while (!stk.empty()) {
root = stk.top();
stk.pop();
vec.push_back(root->val);
// 非