C++ 简单二叉树实现

这篇博客介绍了如何使用C++构建一个简单的二叉树,并实现了基本的先序、中序、后序遍历功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++ 简单二叉树实现
基本的构造,先序、中序、后序遍历功能。

#ifndef BINTREE_H
#define BINTREE_H

#include <iostream>
using namespace std;
typedef int TYPE;

class BinTree
{
public:
    struct Node{
        TYPE date;
        Node *lchild, *rchild;
        Node(TYPE d = TYPE()) :lchild(NULL), rchild(NULL), date(d){};
    };
    typedef Node *NodePointer;

public:
    BinTree();
    //构造一颗树
    //T类型的指针a,传参时传一个数组,负责传入数据
    //size保存数组a 的大小
    //index记录下标
    //invalid表示非法值。
    BinTree(const TYPE *a, int size, int &index, const TYPE& invalid){
        root = MakeTree(a, size, index, invalid);
    }

    ~BinTree();

    //前序遍历
    void PreOrder(){
        Pre(root);
        cout << endl;
    };

    //中序遍历
    void InOrder(){
        In(root);
        cout << endl;
    };

    //中序遍历
    void PostOrder(){
        Post(root);
        cout << endl;
    };

private:
    NodePointer root;           //根节点

private:
    NodePointer MakeTree(const TYPE *a, int size, int &index, const TYPE& invalid){
        NodePointer node = NULL;
        if (index < size&&a[index] != invalid){
            node = new Node(invalid);
            node->date = a[index];
            node->lchild = MakeTree(a, size, ++index, invalid);
            node->rchild = MakeTree(a, size, ++index, invalid);
        }
        return node;
    }
    void Destroy(NodePointer all_node){
        NodePointer node = all_node;
        if (node){
            Destroy(node->lchild);
            Destroy(node->rchild);
            delete node;
            node = NULL;
        }
    }
    void Pre(NodePointer all_node);
    void In(NodePointer all_node);
    void Post(NodePointer all_node);
};

BinTree::BinTree()
{
    root = NULL;
}

BinTree::~BinTree()
{
    Destroy(root);
}

void BinTree::Pre(NodePointer all_node){
    NodePointer node = all_node;
    if (node){
        cout << node->date << " ";
        Pre(node->lchild);
        Pre(node->rchild);
    }
}

void BinTree::In(NodePointer all_node){
    NodePointer node = all_node;
    if (node){
        In(node->lchild);
        cout << node->date << " ";
        In(node->rchild);
    }
}

void BinTree::Post(NodePointer all_node){
    NodePointer node = all_node;
    if (node){
        Post(node->lchild);
        Post(node->rchild);
        cout << node->date << " ";
    }
}
#endif
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值