基于栈的先序、中序、后序遍历
void InOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> st;
while (!st.empty() || root) {
if (root) {
st.push(root);
root = root->left;
}
else {
root = st.top();
st.pop();
cout << root->data << endl;
root = root->right;
}
}
}
void PreOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> st;
while (!st.empty() || root) {
if (root) {
cout << root->data << endl;
st.push(root);
root = root->left;
}
else {
root = st.top();
st.pop();
root = root->right;
}
}
}
void PastOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> st;
TreeNode* last = NULL;
while (!st.empty() || root) {
if (root) {
st.push(root);
root = root->left;
}
else{
root = st.top();
if (root->right && last != root->right) {
root = root->right;
}
else if ((NULL == root->right) || (last == root->right)) {
cout << root->data << endl;
last = root;
st.pop();
root = NULL;
}
}
}
}