首页 > 代码库 > 二叉树遍历的非递归实现

二叉树遍历的非递归实现

#include<stdio.h>#include<stack>#include<stdlib.h>using namespace std;struct ListNode{    int data;    ListNode *lchild,*rchild;};ListNode* Createbst(){    int data;    scanf("%d",&data);    if(data!=-1)    {        ListNode* root=(ListNode*)malloc(sizeof(ListNode));        root->lchild=root->rchild=NULL;        root->data=http://www.mamicode.com/data;"%d",p->data);            s.push(p);            p=p->lchild;        }        if(!s.empty())        {            p=s.top();            s.pop();            p=p->rchild;        }    }}int main(){    ListNode* root;    root=Createbst();    PreOrder(root);    return 0;}

 中序遍历

void PreOrder(ListNode*root){    stack<ListNode*>s;    ListNode* p=root;    while(p!=NULL || !s.empty())    {        while(p!=NULL)        {            s.push(p);            p=p->lchild;        }        if(!s.empty())        {            p=s.top();            s.pop();            printf("%d",p->data);            p=p->rchild;        }    }}

  

二叉树遍历的非递归实现