二叉树的遍历

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>

using namespace std;

typedef struct BSTNode
{
    char data;
    BSTNode *lChild;
    BSTNode *rChild;

} * BTree;
// BTree是BSTNode*类型的,本身就是一个指针类型

BTree create_tree();
void pre_traverse(BTree);
void in_traverse(BTree);
void post_traverse(BTree);

int main(void)
{
    BTree head = create_tree();
    // pre_traverse(head);
    // in_traverse(head);
    post_traverse(head);

    return 0;
}

BTree create_tree()
{
    //容易出错的地方是没有左右子树的节点要显示置空
    //不然很容易出现野指针的问题,递归会死循环

    BTree head = new BSTNode;
    head->data = 'A';

    BTree b = new BSTNode;
    b->data = 'B';
    head->lChild = b;

    BTree c = new BSTNode;
    c->data = 'C';
    head->rChild = c;

    c->lChild = nullptr;
    c->rChild = nullptr;

    BTree d = new BSTNode;
    d->data = 'D';
    b->lChild = d;

    d->lChild = nullptr;
    d->rChild = nullptr;

    BTree f = new BSTNode;
    f->data = 'F';
    b->rChild = f;

    f->lChild = nullptr;
    f->rChild = nullptr;

    return head;
}

//前序遍历的递归实现
void pre_traverse(BTree head)
{
    if (head == nullptr)
    {
        return;
    }
    cout << head->data << "\t";
    if (head->lChild != nullptr)
    {
        pre_traverse(head->lChild);
    }
    if (head->rChild != nullptr)
    {
        pre_traverse(head->rChild);
    }
}

void in_traverse(BTree head)
{
    if (head)
    {
        if (head->lChild)
        {
            in_traverse(head->lChild);
        }
        cout << head->data << "\t";
        if (head->rChild)
        {
            in_traverse(head->rChild);
        }
    }
}

void post_traverse(BTree head)
{
    if (head)
    {
        if (head->lChild)
        {
            post_traverse(head->lChild);
        }
        if (head->rChild)
        {
            post_traverse(head->rChild);
        }
        cout << head->data << "\t";
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值