二叉数顺序栈

第五章  树和二叉树翻转学习任务

      一、本章的重点

分二大部分:树和二叉树。

      从逻辑结构上分,树是表示一对多和一种结构,一般用于表达祖先后代、上下级和整合部分等相关关系。

       本章学习,在前面的线性表相关的基础上,进一步复杂的数据结构。掌握具体层次对象的数据结构表达和存储方法,以及操作方法。了解树特别是二叉树的广泛应用。

二、学习目标

      本章节学习目标,具体地说,要掌握以下几个重点知识点:

·       树的相关概念;

·       树的遍历;

·       树的存储表达方法;

·       二叉树的概念及性质。

·       二叉树的遍历和算法实现。

·       树和二叉树之间的转换。

·       哈夫曼树的应用。

 

#include <iostream>

const int MaxSize=100;

//创建树的节点结构体

template <class DataType>

struct SNode

{

    DataType data;

    int node;

};


template <class DataType>

class DoubleTree {

public:

public:

   

    DoubleTree(DataType a[],int n);

    ~DoubleTree(){std::cout<<"我是树,我已经被销毁";}

    int Length(){returnlength;}

    void GetParents(int i);

    void GetSon(int i);

    int Locate(DataType x);

    void PrintList();

private:

    SNode<int> Tree[100];

    int length;

};

template <class DataType>

 DoubleTree<DataType>::DoubleTree(DataType a[],int n)

{

    

    if (n<=0&&n>=MaxSize)throw "创建失败";

    length=n;

    for (int i=0; i<length; i++) {

        Tree[i].data=NULL;

    }

    for (int j=0;j<length; j++) {

        Tree[j].data=a[j];

        Tree[j].node=j+1;

    }

    

};

template <class DataType>

void DoubleTree<DataType>::GetParents(int i)

{

    //他的妈妈

    if (i%2==0) {

         std::cout<<"节点"<<i<<"的母亲为"<<Tree[i/2].data<<"下标为"<<Tree[i/2].node;

    }

    else

    {

        std::cout<<"节点"<<i<<"的母亲为"<<Tree[(i-1)%2].data<<"下标为"<<Tree[(i-1)/2].node;

    }

    std::cout<<"\n";

}

template <class DataType>

void DoubleTree<DataType>::GetSon(int i)

{

//他的左孩子为

    if(Tree[2*i].data!=NULL)

std::cout<<"节点"<<i<<"的左孩子为"<<Tree[2*i].data<<"下标为"<<Tree[2*i].node;

    else std::cout<<"没有左孩子";

//他的右孩子为

    if(Tree[2*i+1].data!=NULL)

        std::cout<<"节点"<<i<<"的右孩子为"<<Tree[2*i+1].data<<"下标为"<<Tree[2*i+1].node;

    else std::cout<<"没有右孩子"; std::cout<<"\n";

}

template <class DataType>

void DoubleTree<DataType>::PrintList()

{

    for (int i=0;i<length;i++) {

        std::cout<<"下标为"<<Tree[i].node<<"值为"<<Tree[i].data<<" ";

    }

    std::cout<<"\n";

}

template <class DataType>

int DoubleTree<DataType>::Locate(DataType x)

{

    for (int i=0; i<length; i++) {

        if (Tree[i].data==x) {

            break;

        }

        else continue;

    }

     std::cout<<"\n";

}


int main(int argc,const char * argv[]) {

    int a[7]={1,2,3,6,NULL,10,20};

    DoubleTree<int> TREE(a,7);

    TREE.PrintList();

    TREE.GetSon(3);

    TREE.GetParents(4);

    return 0;

}


实验总结:

本次二叉树我用了数组实现,但是跟之前的模板类有些不同,这次是先创建好一颗空树,没有数值的地方用NULL表示,然后把数值都填进去。本次实验还算可以,但是听老师说树是很重要的知识点,希望能更好的掌握,课后还需多加练习.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值