树与森林的存储、遍历和树与森林的转换

树的存储结构

   

双亲表示法

 

孩子表示法:

(a)多重链表(链表中每个指针指向一棵子树的根结点);

(b)把每个跟结点的孩子结点排列起来,看成一个线性表,且以单链表做存储结构.且N个头指针也组成一个线性表.

 

孩子兄弟表示法://二叉树表示法或二叉链表表示法

以二叉链表做树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点(fchild 和nsibling)

//孩子兄弟表示法
typedef struct CSNode{
    int data;
    CSNode *fchild ,*nsibling;
} CSNode, *CSTree;

二叉树和树都可用二叉链表作存储结构,则以二叉链表作为媒介可导出树与二叉树之间的一一对应关系。

森林和二叉树的转换

由树的二叉链表表示定义知道:任何一棵和树对应的二叉树的右子树必空。若将森林中第二棵树的根结点看成第一棵树的根结点的兄弟,如此重复……则可以导出森林和二叉树的对应关系。

树和二叉树的转换

使用孩子兄弟表示法来转换,土办法:可以把有同一个双亲结点的各个孩子结点有虚线串起来,把每层的每个结点分支从左到右除去第一个外,其余都剪掉,则剩余的图(包括虚线)就是二叉树。详细过程如下:

树和森林的遍历

只有两种,森林得失先序和中序,树的是先跟和后跟

树的遍历

先根遍历:(二叉树的先序遍历)

        先访问根结点,

        然后依次先根遍历根的每棵子树。

先根遍历序列,对应二叉树先序遍历

后根遍历:(二叉树的中序遍历)

        后根访问根的每棵子树,

        然后访问根结点。

后根遍历序列,对应二叉树的中序遍历

森林的遍历:

先序

  1.访问森林中第一棵树的根结点;

  2.先序遍历第一棵树中根结点的子树森林;

  3.先序遍历除去第一棵树之后剩余的树构成的森林.

先序遍历序列

中序

  1.中序遍历第一棵树中根结点的子树森林;

  2.访问森林中第一棵树的根结点;  

  3.中序遍历除去第一棵树之后剩余的树构成的森林.

中序遍历序列

 

辛苦的劳动,转载请注明出处,谢谢……

http://www.cnblogs.com/kubixuesheng/p/4391381.html

时间: 2024-10-22 22:53:04

树与森林的存储、遍历和树与森林的转换的相关文章

我在用C#写一个huffman编码的窗体程序,但是在遍历huffman树的时候进入了死循环,我看了一下午没找到答案

问题描述 希望高手能够指点一下!谢了... form1.csusingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Collections;namespaceAL_4{publicpartialc

jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别

        这篇文章主要是对jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在这个sprint中,因为要写前端UI,所以用到了jQuery,但是jQuery在向上遍历DOM树的API中,有parents(). parent().closest()这几个,一直不太清楚它们具体的区别,所以狠下心好好读了一下jQuery的API文档,并把区别记在这里,以供参考.    1.parents

jQuery遍历节点树方法分析_jquery

本文实例讲述了jQuery遍历节点树方法.分享给大家供大家参考,具体如下: demo.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script src="js/jquery-1.10.1.min.js" type=&

javascript先序遍历DOM树的方法_javascript技巧

DOM树由文档中的所有节点(元素节点.文本节点.注释节点等)所构成的一个树结构,DOM树的解析和构建是浏览器要实现的关键功能.既然DOM树是一个树结构,那么我们就可以使用遍历树结构的相关方法来对DOM树进行遍历,同时DOM2中的"Traversal"模块又提供了两种新的类型,从而可以很方便地实现DOM树的先序遍历. 注:本文中的5种方法都是对DOM的先序遍历方法(深度优先遍历),并且只关注Element类型. 1. 使用DOM1中的基础接口,递归遍历DOM树 DOM1中为基础类型Nod

Oracle存储过程 树状结构的存储与展示

树状结构的存储与展示  drop table article;    create table article  (    id number primary key,    cont varchar2(4000),    pid number,    isleaf number(1),  --0 代表非叶子节点,1代表叶子节点 叶子节点:节点下面没有其他子节点    alevel number(2)  );    insert into article values (1, '蚂蚁大战大象',

深入linux下遍历目录树的方法总结分析_C 语言

前几天需要实现对整个目录树的遍历,查阅了相关的一些资料.开始找到的原始的方法是使用readdir()与lstat()函数实现递归遍历,后来发现linux对于目录遍历这种最常用的操作已经提供了很完善的接口:ftw()与nftw().下面就这两种方法具体说明一下.1.手动实现递归1.1 stat()函数族stat函数族包括:stat,fstat以及lstat函数,都是向用户返回文件的属性信息(元数据). 复制代码 代码如下: view plaincopy to clipboardprint?#inc

C++中的树、二叉树、二叉树遍历、二叉树前序、中序、后序遍历相互求法

本博文来总结下树.二叉树以及二叉树前序.中序.后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明. 1.什么是树?什么是二叉树? 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合. 二叉树是指结点的度不超过2的有序树. (结点的度:树中的一个结点拥有的子树数目.) 2.二叉树的前序.中序.后序遍历的特性  二叉树前序遍历特性:   (1).访问根节点  (2).前序遍

PostgreSQL遍历简单树的方法教程

还是用上次MySQL存储过程实现Oracle邻接模型树形处理的方法实例同样的表以及数据.POSTGRESQL自诩最像ORACLE的数据库,所以大部分语句也就都可以简单而且变相的实现了. 在这点上可以用他自己带的WITH递归功能,还可以用第三方扩展带来的类似connect by 函数.   先来看第一点,用递归的WITH来展现这棵树的路径.  代码如下 复制代码 t_girl=# with recursive tmp_country(id,path) as t_girl-# ( t_girl(#

php 递归遍历文件树代码

> ../b.php教程 和 ../a.php,结果就会在扫描报告上面出现两次,很是奇怪.    代码如下 复制代码 //Update at 2010.07.25 - 以下代码作废 $path = '..'; function get_filetree_scandir($path){ $tree = array(); foreach(scandir($path) as $single){ if(is_dir('../'.$single)){ $tree = array_merge($tree,g