【黑皮书】树

目录

文章目录

前言

一  树的表现形式

二  树的基本概念

三  树的存储方法

 四  树的遍历

总结


前言

树的概念,树的表示方法,树的遍历方法,树的存储


一  树的表现形式

1  父子节点表示法
这个是我们最常用的方法,每一棵树的根叫作根r的儿子,而r是每一棵子树的根的父亲

这个是我们日常里面最常用的方法,但是当我们不知道我们要连接多少个节点的时候,这个时候就有了另外一种表示方法,就是兄弟儿子表示法

二  兄弟儿子表示法
 就比如下面这种,我不知道要连接多少个节点的时候,我们的结构体要怎么进行定义呢?有的人肯定会说定义一个结构体数组呗,但是如果定义了1w,我有10w呢?又或者说我就只有6个,那岂不是很浪费时间,这个时候就要引入我们的兄弟儿子表示法

我们给树进行标号

然后这个时候我们就用兄弟表示法

 我们利用了兄弟表示法,这个时候你发现其实这个就是一个二叉树,很巧妙,但是我们的结构体要怎么定义呢?

struct TreeNode{
  int data;
  struct TreeNode* son;
  struct TreeNode* bro;
};

一个是用来指向儿子的,一个是用来指向兄弟的
这是两个树里面常见的表示方法
 

二  树的基本概念

1  一棵树是有N个节点和N-1条边组成的
2  没有儿子的节点称作叶子节点  son
3  具有相同父亲的节点称作为兄弟节点  bro
4  路径:从A到L的路径上经过的节点的序号叫做路径,如:A B C D E F G H Y J K L,这样就是路径
5  路径的长:从A到L的边的个数有多少个,如11个,这就是路径的长
6  深度和高其实差不多,不需要细纠,深就是从子叶到根,高就是该节点到叶子节点  

7  度为0的节点是叶子节点,即没有子节点的节点。

    度为1的节点有一个子节点。

    度为2的节点有两个子节点。

三  树的存储方法

一  数组存储
 这个一般是存储完全二叉树比较有用

我们可以看到每一个父节点的子节点,都是左节点是父节点的序号乘以2,右节点是父节点的序号乘以2+1,上面这个是完全二叉树,但是如果不是完全二叉树的画就会浪费大量的空间

二  链表存储
这个就是很简单了,这里就不说了 

 四  树的遍历

遍历的方法:前序遍历,中序遍历,后序遍历

  1. 先序遍历(Pre-order Traversal)

    • 先序遍历的顺序是:根节点 -> 左子树 -> 右子树

    • 具体步骤是:首先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树

  2. 中序遍历(In-order Traversal)

    • 中序遍历的顺序是:左子树 -> 根节点 -> 右子树

    • 具体步骤是:首先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树

  3. 后序遍历(Post-order Traversal)

    • 后序遍历的顺序是:左子树 -> 右子树 -> 根节点

    • 具体步骤是:首先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点


总结

我们学习树的表示方法,树的概念,树的存储,树的遍历方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值