树的遍历

在这里插入图片描述
树的先序、后序、层次遍历

#include <iostream>
using namespace std;
typedef struct Branch
{
    int cIdx;//当前结点序号
    Branch *next;//(邻接矩阵中)指向的下一个树结点
}Branch;
//树的结点
typedef struct
{
    int data;
    Branch* first;//树结点的第一个孩子存放的地方
}TNode;
//树的先序列遍历
void preOrder(TNode* p,TNode tree[]){
    if(p != NULL)
    {
        visit(p);//输出p
        Branch* q;
        q = p->first;
        while(q != NULL){
        	//tree是一个数组,此处需要指针,所以用&tree[]
            preOrder(&tree[q->cIdx],tree);//走到最左的孩子那里
            q = q->next;//回溯的时候,往右走;
        }
    }
}
//树的后序遍历
void postOrder(TNode* p,TNode tree[]){
    if(p != NULL)
    {
        Branch* q;
        q = p->first;
        while(q != NULL){
        	//tree是一个数组,此处需要指针,所以用&tree[]
            postOrder(&tree[q->cIdx],tree);//走到最左的孩子那里
            q = q->next;//回溯的时候,往右走;
        }
        visit(p);//输出p
    }
}

//树的层次遍历
void level(TNode *tn,TNode tree[])
{
    int front,rear;
    TNode *que[maxSize];
    front = rear = 0;
    TNode *p;
    if(tn != NULL){
        rear = (rear+1) % maxSize;
        que[rear] = tn;
        while(front)
        {
            front = (front+1)%maxSize;
            p = que[front];
            visit(p);
            Branch* q = p->first;
            while (q != NULL)
            {
                rear = (rear+1)%maxSize;
                que[rear] = &tree[q->cIdx];
                q = q->next;
            }
        }
    }
}
int main()
{
    return 0;
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieshenai

为了遇见更好的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值