先序遍历二叉树非递归算法

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
int data;
struct node *lchild,*rchild;
}treenode;
typedef struct{
treenode *base;
treenode *top;
}mystack;

void init(mystack &m){
m.base=new treenode[100];
m.top=m.base;
}
void push(mystack &m,treenode x){
*m.top++=x;
}
void pop(mystack &m){
m.top--;
}
treenode gettop(mystack m){
return *(m.top-1);
}
int main()
{
    mystack m;
    init(m);
    treenode *root,*a,*b,*c,*p;
    root=new treenode;
    root->lchild=NULL;
    root->rchild=NULL;
    a=new treenode;
     a->lchild=NULL;
    a->rchild=NULL;
   b=new treenode;
    b->lchild=NULL;
    b->rchild=NULL;
    c=new treenode;
     c->lchild=NULL;
    c->rchild=NULL;
    root->data=1;
    a->data=2;
    b->data=3;
    c->data=4;
    root->lchild=a;
    root->rchild=b;
    a->lchild=c;

    p=root;
    while(p!=NULL||m.top!=m.base){
        if(p){
            push(m,*p);
            cout<<p->data<<" ";
            p=p->lchild;
        }else{
        treenode q=gettop(m);
        pop(m);
        //cout<<q.data<<" ";
        p=q.rchild;
        }


    }


    //cout << "Hello world!" << endl;
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值