二叉树C++实现

本文详细介绍了如何使用C++构建二叉树,并实现前序、中序和后序遍历。通过具体代码示例,展示了节点的创建、树的构建过程以及不同遍历方式的具体实现。

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

说明

这是个经典问题,其中指针,结构是以后学习的基础,在此记录一下

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

class BinTree{
public:
    struct Node{
        TYPE data;
        Node *lchild, *rchild;
        Node(TYPE d = TYPE()):data(d), lchild(NULL), rchild(NULL){};
    };
    typedef Node *NodePointer;
private:
    NodePointer root;
public:
    BinTree();
    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, 0);
        cout<<endl;
    };
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);
            cout<<"index: "<<index<<" a[index]: "<<a[index]<<endl;
            node->data = a[index];
            node->lchild = MakeTree(a, size, ++index, invalid);
            node->rchild = MakeTree(a, size, ++index, invalid);
        }
        return node;
    }
    void DestoryTree(NodePointer T){
        if (T){
            DestoryTree(T->lchild);
            DestoryTree(T->rchild);
            delete T;
            T = NULL;
        }
    }
    void Pre(NodePointer all_node);
    void In(NodePointer all_node);
    void Post(NodePointer all_node, int level);
};

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

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

void BinTree::Pre(NodePointer root1){
    NodePointer root = root1;
    if (root){
        cout<<root->data<<endl;
        cout<<"left: ";
        Pre(root->lchild);
        cout<<"right: ";
        Pre(root->rchild);       
    }
}

void BinTree::In(NodePointer root){
    if (root){
        In(root->lchild);
        cout<<root->data<<" ";
        In(root->rchild);
    }
}

void BinTree::Post(NodePointer root1,int level){
     NodePointer root = root1;
    if (root){
        Post(root->lchild, ++level);
        Post(root->rchild, ++level);
        cout<<"level: "<<level<<" data: "<<root->data<<" "<<endl;
    }
}

int main(int argc, char const *argv[])
{
    TYPE list[6]= {1,2,0,3,4,0};
    int i = 0;
    int &index = i;
    BinTree * b = new BinTree(list, 6, index, 0);
    b->PostOrder();
    delete b;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值