二叉树中序遍历(非递归)
来源:互联网 发布:未闻花名网络歌手下载 编辑:程序博客网 时间:2024/05/20 15:40
#include <iostream>#include <stack>using namespace std;struct Node{ int value; Node *left; Node *right;};void inorderTraverse(Node *root){ if (NULL == root) { return; } //用p来记录最后弹出的节点 Node *p = root; stack<Node*> buf; buf.push(root); while (!buf.empty()) { Node *top = buf.top(); if (top->left == NULL && top->right == NULL) { cout << top->value << " "; p = top; buf.pop(); } else if (top->left != NULL && top->right == NULL) { if (p == top->left) { cout << top->value << " "; p = top; buf.pop(); } else { buf.push(top->left); } } else if (top->left == NULL && top->right != NULL) { if (p == top->right) { p = top; buf.pop(); } else { cout << top->value << " "; buf.push(top->right); } } else { if (p == top->left) { cout << top->value << " "; buf.push(top->right); } else if (p == top->right) { p = top; buf.pop(); } else { buf.push(top->left); } } }}