利用非递归方法实现二叉树的先序遍历

来源:互联网 发布:大疆无人机 人工智能 编辑:程序博客网 时间:2024/04/28 13:38
#include<iostream>#include<stack>#define N 7using namespace std;typedef struct node{struct node *leftChild;struct node *rightChild;int data;}BiTreeNode, *BiTree;// 生成一个结点BiTreeNode *createNode(int i){BiTreeNode * q = new BiTreeNode;q->leftChild = NULL;q->rightChild = NULL;q->data = i;return q;}BiTree createBiTree(){BiTreeNode *p[N];int i;for(i = 0; i < N; i++)p[i] = createNode(i + 1);// 把结点连接成树for(i = 0; i < N/2; i++){p[i]->leftChild = p[i * 2 + 1];p[i]->rightChild = p[i * 2 + 2];}return p[0];}void preOrderTraverse(BiTree T){if(NULL == T)return;BiTreeNode *p = T;stack<BiTreeNode *> s;s.push(T);    while(!s.empty()){// 根进根出p = s.top();cout << p->data << " ";s.pop();// 根的右孩子被压入栈if(NULL != p->rightChild)s.push(p->rightChild);//根的左孩子被压入栈if(NULL != p->leftChild)s.push(p->leftChild);} // end while(!s.empty()) cout << endl;}int main(){BiTree T = createBiTree();cout << "先序遍历:" << endl;preOrderTraverse(T);return 0;}