//前序遍历
void preOrderN(TreeNode * root) {
stack<TreeNode * > st;
//st.push(root);
TreeNode * p = root;
while (!st.empty() || p != NULL) {
while (p) {
printf("%d\n", p->val);
st.push(p);
p = p->left;
}
if (!st.empty()) {
TreeNode * temp = st.top();
st.pop();
p = temp->right;
}
}
}
//中序遍历
void inOrderN(TreeNode * root) {
stack<TreeNode *> st;
TreeNode * p = root;
while (!st.empty() || p != NULL) {
while (p) {
st.push(p);
p = p->left;
}
if (!st.empty()) {
TreeNode * temp = st.top();
st.pop();
printf("%d\n", temp->val);
p = temp->right;
}
}
}
//后续遍历
void postOrderN(TreeNode * root) {
stack<TreeNode *> st;
stack<bool> stFlag;
TreeNode * p = root;
while (!st.empty() || p != NULL) {
while (p) {
st.push(p);
stFlag.push(true);
p = p->left;
}
if (!st.empty()) {
bool temp = stFlag.top();
if (temp) {
stFlag.pop();
stFlag.push(false);
p = st.top()->right;
}
else {
printf("%d\n", st.top()->val);
st.pop();
stFlag.pop();
}
}
}
}