zoukankan      html  css  js  c++  java
  • 树和森林(学习记录)

    一、存储结构

    孩子兄弟存储

    typedef struct CSNode,*CSTree;{
        ElemType data;
        struct CSNode *firstchild,*nextsibling;
    }CSNode,*CSTree;
    

    二、树的遍历规则

    树的先根遍历和后根遍历相当于二叉树的先序遍历和中序遍历
    森林的先序遍历和中序遍历相当于二叉树的先序遍历和中序遍历

    三、树的遍历应用

    1.求树的深度
    类似于二叉树的深度

    int TreeDepth(CSTree T){
        if(!T)
            return 0;
        else{
            h1 = TreeDepth(T->firstchild);	//子树的深度
            h2 = TreeDepth(T->nextsibling);	//兄弟的深度
            return max(h1+1,h2);
        }
    }
    

    2.输出树中所有从根到叶子的路径
    可以画图理解
    栈中的结点含义:当前结点的所有子树路径还没有输出完,就保存在路径中

    void AllPath(BiTree T,Stack &S){
        //输出二叉树根到叶子所有路径
        if(T){
            Push(S,T->data);
            if(!T->lchild && !T->rchild)
                PrintStack(S);
            else{
                AllPath(T->lchild,S);
                AllPath(T->Rchild,S);
            }
            Pop(S);
        }
    }
    
    void OutPath(BiTree T,Stack &S){
        //输出森林中从根到叶子的所有路径
        while(T){
            Push(S,T->data);
            if(!T->firstchild)
                PrintStack(S);
            else{
                OutPath(T->firstchild,S);
            }
            Pop(S);
            T = T->nextsibling;
        }
    }
    
    作者:inss!w!
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 相关阅读:
    [Hadoop]
    [Linux]
    [Linux]
    [Hadoop]
    [Hadoop]
    vue-学习笔记-API-全局配置
    vue 风格指南-必须的
    vue 学习笔记-复用-自定义指令
    vue学习笔记-过滤器
    vue 学习笔记-复用-对象混入
  • 原文地址:https://www.cnblogs.com/Hfolsvh/p/14727225.html
Copyright © 2011-2022 走看看