二叉樹非遞歸後序遍歷java
vector<int> post_order(TreeNode* root) { stack<TreeNode*> stack; vector<int> res; if(root == nullptr) return res; TreeNode* prev = nullptr; TreeNode* curt = nullptr; stack.push(root); while(!stack.empty()) { curt = stack.top(); if(prev == nullptr || prev->left == curt || prev->right == curt) { if(curt->left != nullptr) stack.push(curt->left); else if(curt->right != nullptr) stack.push(curt->right); else{ stack.pop(); res.push_back(curt->val); } } else if(curt->left == prev) { if(curt->right != nullptr) stack.push(curt->right); else{ stack.pop(); res.push_back(curt->val); } }else { res.push_back(curt->val); stack.pop(); } prev = curt; } return res; }