// 1. 先序遍历
void FirstSearch(TreeNode* root) {
if (nullptr == root)
return;
stack<TreeNode*> stack_;
stack_.push(root);
while (stack_.size()) {
TreeNode* node = stack_.top();
stack_.pop();
// 处理当前节点
cout << node->val << endl;
if (nullptr != node->right)
stack_.push(node->right);
if (nullptr != node->left)
stack_.push(node->left);
}
}
// 2. 中序遍历
void MiddleSearch(TreeNode* root) {
if (nullptr == root)
return;
stack<TreeNode*> stack_;
stack_.push(root);
while (stack_.size()) {
while (nullptr != root->left) {
stack_.push(root->left);
root = root->left;
}
while (stack_.size()) {
TreeNode* node = stack_.top();
stack_.pop();
// 处理节点
cout << node->val << endl;
if (nullptr != node->right) {
stack_.push(node->right);
root = node->right;
break;
}
}
}
}
// 3. 后序遍历
void BackSearch(TreeNode* root) {
if (nullptr == root)
return;
stack<TreeNode*> stack_;
stack_.push(root);
TreeNode* lastNode = nullptr;
while (stack_.size()) {
while (nullptr != root->left) {
stack_.push(root->left);
root = root->left;
}
while (stack_.size()) {
if (lastNode == stack_.top()->right || nullptr == stack_.top()->right) {
TreeNode* node = stack_.top();
stack_.pop();
cout << node->val << endl;
lastNode = node;
}
else {
root = stack_.top()->right;
stack_.push(root);
break;
}
}
}
}