树的相关问题

树的概念

        树是具有以下性质的有限结点集合:

                (1) 有一个被称为“根”的结点。

                (2) 根的所有孩子都是一颗子树的根。

树的相关术语

结点的度 degree ):该结点拥有的子数数目。上图中: degree(A) = 3, degree(F) = 0
叶子 leaf ):度为 0 的结点
双亲 parent ):拥有子树的结点
孩子 son ):某个双亲结点的子树的根
兄弟 sibling ):拥有同一个双亲结点的孩子
祖先 ancestor ):从某一个结点往上一直到根经过的所有结点
后代 descendants ):子树的所有结点
层次 level ):双亲的层次 + 1; 根的层次 = 1.
高度 height / 深度( depth ): max { levels}.

二叉树及定义

二叉树是一类特殊的树.

(1)二叉树中的每个结点至多只有两棵子树,即二叉树中不存在度大于二的结点.

(2)二叉树的由三个基本单元构成:根结点,左子树,右子树.

(3)二叉树的左右子树有次序之分,顺序不能颠倒.

二叉树的基本形态及计数:

 二叉树的遍历

问题的提出:

         在二叉树的一些应用中,为了在树中查找具有某种特征的结点,或者对树中的全部结点逐一进行处理。这样就提出了一个遍历二叉树的问题,即如何按某条搜索路径寻访树中的每个结点,使得每个结点均被访问一次,而且仅被访问一次。“访问”的含义很广,可以是对结点进行处理,如输出结点的信息等等。

         因此对二叉树而言:可以有三条搜索路径:

1)先上后下的按层次搜索

2)先左子树,后右子树的遍历

3)先右子树,后左子树的遍历

遍历二叉树

  二叉树由根、左子树、右子树三部分组成

  二叉树的遍历可以分解为:访问根,遍历左子树和遍历右子树

令:

L:遍历左子树                                          D:访问根结点                                        R:遍历右子树                 

   有六种遍历方法:

   DLRLDRLRD DRLRDLRLD

 

约定先左后右,有三种遍历方法: DLRLDRLRD ,分别称为

    先序遍历(先根遍历)、中序遍历(中根遍历)、后序遍历(后根遍历)

 

 

 

 

 

 

 

 

 

 典型例题:Tree Recovery

一个二叉树 , 最多 26 个结点 , 分别用英文字母代表 . 现给出前序遍历及中序遍历 , 请输出后序遍历 .
Sample Input

DBACEGF ABCDEFG
BCAD CBAD

Sample Output

ACBFGED
CDAB

 

分析:

这个题是个常见题,我们可以在纸上先模拟的画

一下样例,程序实现时可以递归实现.对于树这种

数据结构而言,递归是经常用到的,因为树本身的

结构就是一个递归的概念.

树的存储

 

 

 所以

 

 

 

 

 例题:

树的深度计数

 输入
第一行是一个整数 N 1≤N ≤50000 ),表示计算机的台数,计算机被编号为 1..N 。 
下面
N-1 行,每行包括两个整数 X, Y ,表示 X Y 这两台计算机之间由一条网线连接。 
1 号点为根
输出

给出N行,分别表示从1号到N号点,每个点的深度为多少

输入复制
3
1 2
1 3
输出复制
0
1
1

 模板题,自己去思考吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值