链表实现二叉树

头文件

// 二叉树的链表存储
#include <iostream>
using namespace std;

enum status{OK = 1, ERROR = 0};

typedef int elemType;

// 二叉树(根节点)
typedef struct TreeNode* BinTree;

// 树节点存储结构
struct TreeNode
{
    elemType data;

    TreeNode* leftChild;

    TreeNode* rightChild;
};

//----------------------------------------初始化----------------------------------------//
status InitBiTree(BinTree &t)
{
    t = nullptr;

    return OK;
}

//----------------------------------------先序创建二叉树----------------------------------------//
status CreateBiTree(BinTree &t)
{
    int data;
    cin >> data;

    if(data == 0) 
    {
        t = nullptr;
        cout << "--------------------------" << endl;
    }
    else
    {
        t = new TreeNode;
        t->data = data;

        cout << "请输入 " << t->data << " 的左孩子 : ";
        CreateBiTree(t->leftChild);

        cout << "请输入 " << t->data << " 的右孩子 : ";
        CreateBiTree(t->rightChild);
    }
}

//----------------------------------------先序遍历二叉树----------------------------------------//
status PreOrderTraverse(BinTree &t)
{
    if(t != nullptr)
    {
        cout << t->data << " ";
        PreOrderTraverse(t->leftChild);
        PreOrderTraverse(t->rightChild);
    }
}

//----------------------------------------深度----------------------------------------//
int Depth(BinTree &t)
{
    if(t == nullptr)
        return 0;
    else
    {
        int Depth_L = Depth(t->leftChild);
        int Depth_R = Depth(t->rightChild);

        if(Depth_L >= Depth_R)    return Depth_L + 1;
        else                      return Depth_R + 1;
    }
}

//----------------------------------------总结点数----------------------------------------//
int NodeSum(BinTree &t)
{
    if(t == nullptr)
        return 0;
    else
    {
        int NodeSum_L = NodeSum(t->leftChild);
        int NodeSum_R = NodeSum(t->rightChild);

        return NodeSum_L + NodeSum_R + 1;
    }
}

测试文件

#include <iostream>
#include "tree.hpp"
using namespace std;

int main()
{
    BinTree t1;

    InitBiTree(t1);

    cout << "请输入根节点 : ";
    CreateBiTree(t1);

    cout << endl;
    PreOrderTraverse(t1);

    cout << endl << "树的深度为 : " << Depth(t1);

    cout << endl << "树的总节点数为 : " << NodeSum(t1);

    system("pause");
}

测试数据

微信图片_20220211230639

测试结果

image-20220211230752664

posted @ 2022-02-11 23:10  Cornfield_Chase  阅读(33)  评论(0)    收藏  举报