普通树的一些操作,杂记

普通树的一些操作,杂记




//树的数据结构,静态实现 

struct Node{

    typename data;      //数据域
    vector child;       //指针域,存放所有子结点的下标 


}node[maxn];            //结点数组,maxn为结点上限个数



//新建一个树结点,但是,一般考试中设计树(非二叉树)的考查时,
//一般都给出了结点的编号,我们可以把给定的编号直接作为node数组的
//下标来使用。 

int index=0;

int new_node(int v)
{
    node[index].data =v;
    node[index].child.clear();  //清空子结点

    return index++;         //返回结点下标,并令index自增 



} 


//如果题目中不涉及结点的数据域只需要数的结构
//简化为:  vector<int> child[maxn]




//树的先根遍历

void preorder(int root) 
{
    printf("%d ",node[root].data);  //访问当前结点

    for(int i=0;i<node[root].child.size();i++) 
    {
        preorder(node[root].child[i]);  //递归访问结点root的所有子结点 

    }


}


//树的层序遍历



void layerorder(int root) 
{
    queue<int>  queue;

    queue.push(root);


    while(!queue.empty())
    {
        int front=queue.front();

        printf("%d ",node[front].data); //访问当前结点的数据

        queue.pop();

        for(int i=0;i<node[front].child.size();i++) 
        {

            queue.push(node[front].child[i]);   //将当前结点的所有子结点如队列 

        }




    }









}





//带 层  的树的数据结构静态实现


struct Node{

    int layer;      //记录层号 
    int data;

    vector<int> child;


}node[maxn]; 





//新的树的  层序遍历




void layerorder(int root) 
{
    queue<int> queue;

    queue.push(root);

    node[root].layer=1;

    while(!queue.empty())   
    {

        int front=queue.front();    //取出队首元素 

        printf("%d ",node[front].data);

        queue.pop();

        for(int i=0;i<node[front].child.size();i++)
        {
            int child=node[front].child[i];

            node[child].layer=node[front].layer+1;

            queue.push(child);      //将当前结点的所有子结点入队列 

        }



    }





}



































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值