树与二叉树的学习笔记

相比于如链表之类的线性数据结构只能表示单一的前驱与后继,树结构是一个更为复杂的数据结构,所能表达的关系也更复杂(如父子,上级和下属等)。所谓的树指的是拥有n(n>=0)个结点组成拥有一个根节点,以及m个互不相交的子集组成的一个集合,其中每一个子集有称为该树的一个子树,我们很容易的看出树结构是一个递归定义的一个数据结构。

下面我们来看一下树结构里面的一些定义:

1:结点的度:结点所拥有的子树的个数。

2:树的度:所有节点中最大的度就是该树的度

3:叶子结点:度为0的节点。

4:分支结点:度不为0的节点。

5:路径与路径长度:一个节点有通向另一个结点的边,怎这斜边称为路径。边的条数称为路径长度。

6:树的深度:树中所有结点的最大层数。

7:层序编号:对树进行重上到下,从左到右的依次进行编号。

8:深林:互不相交的树组成的集合,任何一棵树去掉一条边就成为深林。 

树的基本数据类型和链表差不多,知识根据不同的要求适当的修改:如下就是一个定义了记录左孩子和右孩子的树的节点类型:

public class Tree {
	private int date;
	private Tree lChild;
	private Tree rChild;

}
树的遍历问题:

1:前序遍历:先遍历根节点,在遍历根的左孩子。直到某根节点没有左孩子在遍历其有孩子。

2:中序遍历:先遍历根节点的左孩子,直到没有左孩子在遍历根的右孩子,直到右孩子遍历完后再遍历根节点。

3:层序遍历:从第一层开始从上到下,每一层中从左到右一次进行遍历。


二:二叉树:

作为一种特殊的树,在现实生活中往往用的比较多,同样在笔试和面试当中有出现的相对较多。所谓二叉树是指:每一个作为根节点的节点只有左孩子或右孩子。因此在二叉树中不存在度大于2的节点。

几种特殊的二叉树:

1:斜树:每一层只有一个节点的二叉树,分为左斜树和右斜树。

2:满二叉树:叶子结点出只出现在最后一层并且除叶子结点外所有的节点度都为2.

3:完全二叉树:对结点进行编号,所产生的编号和把该数补全为一个满二叉树所得到的编号完全一样。

二叉树的几个性质:

1:二叉树的第i层最多有2*(i-1)个结点。

2:在一个深度为k的二叉树中,最多有2的k次方减一个结点,最少有k个结点。

3:二叉树中叶子节点为N0个,度为2的节点有N2个,那么满足N0=N2+1。

二叉树的遍历:

1:前序遍历:如果树为空则返回。否则先遍历根节点,在前序遍历左孩子,前序遍历右孩子。通过定义我们可以看到这是一个递归的过程。

2:中序遍历:如果树为空则返回。否则中序遍历树的左孩子,遍历根节点,中序遍历树的右孩子。

3:后序遍历:如果为空则返回。否则后续遍历树的左孩子,后续遍历树的右孩子,遍历根节点。

4:层序遍历:从上到下,从左到右依次遍历。


下面来看几道典型的笔试题:

输入两棵二叉树A和B,判断树B是不是A的子结构

分析:首先判断B是不是空树,如果B 是空树的话那么它是任何数的子树。

如果A和B 都不是空树的话,在A 中查找B 的根结点,找到相等的通过递归不断的进行比较。

总结:递归算法在二叉树中运用的比较,不管是遍历还是构造。其实这道题就是一个查找不断比较的过程,如果进一步问是不是子树的话,也按照这个这个思路分析。总之递归算法在二叉树中运用的比较多,所以我们遇到类似问题尽量用递归去解决。







































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值