数据结构--二叉树遍历 C++实现

1 篇文章 0 订阅
1 篇文章 0 订阅

1、二叉树结构定义

struct node{

  int data;//数据

 node * leftchild;//左孩子结点

node * rightchild;//右孩子结点

}

2、二叉树的递归遍历

   2.1先序遍历

       void preorder(node *r){

     if(r!=NULL){//NULL 还是null?

       cout<<r->data<<endl;//访问结点

       preorder(r->leftchild);//递归访问左结点

      preorder(r->rightchild);//递归访问右结点

       }

    }

   2.2中序遍历

   void inorder(node *r){

     if(r!=NULL){

     inorder(r->leftchild);

    cout<<r->data<<endl;

    inorder(r->rightchild);

   }

}

   2.3后序遍历

void postorder(node *r){

  if(r!=NULL){

   postorder(r->leftchild);

   postorder(r->rightchild);

   cout<<r->data<<endl;

}

}

3、二叉树的非递归遍历(中序遍历)

  思路:设S为一个工作栈,P为指向根结点的指针;

        【1】当P为非空时,将P指向的结点进栈,并将P指向该结点的左子树;

        【2】当P为空时,弹出栈顶元素,显示结点元素,并将P指向该结点的右子树;(相当于左子树已经访问完,访问结点,然后访问右子树)

        【3】重复步骤【1】【2】,直到栈为空,P为空。

实现:

     void InOder(node * r)

{

stack<node *> S;

node *P;

P=r;

while(P||!S.IsEmpty())

{

    if(p)

     {

     S.push(P);

     P=P->leftchild;

     }

   else

  {

  S.pop();

   cout<<p->data<<endl;

   P=P->rightchild;

   }

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值