代码捉襟见肘,欢迎批评指正 ^.^
先谈一下二叉树:
二叉树是常用的存储数据的方式。除了根节点之外,每个节点都有一个父节点,最多有两个子节点,左孩子和右孩子
对于二叉树有如下操作:
1 添加节点: 按层次添加,优先选择层次最小的,并且优先靠左添加节点
2 树的遍历: 分为 深度优先 和 广度优先
构造一个二叉树当作例子 根是1 左孩子2 右孩子3 ......
1
2 3
4 5 6 7
广度优先遍历: 按照层次由低到高,先左后右的顺序 1 2 3 4 5 6 7
编程实现的思想: 开启一个队列 queue(队列是数据结构中先进先出的实现,队列的朋友需要再看一看数据结构链表的知识)
1 把 树根 1 放进队列 队列变成 1
2 重复执行:从队列取一个队头出队一个节点,如果它有左孩子,把左孩子放入队列,如果他有右孩子把右孩子放入队列。输出当前节点的数值
一直到队列空了为止
2.1 从队头取出1 把1输出,把1的左孩子和右孩子添加到队列 队列变成: 2 3
2.2 从对头取出2 把2输出,把2的左孩子和右孩子添加到队列 队列变成: 3 4 5
2.3 从对头取出3 把3输出, 把3的左孩子右孩子添加到队列, 队列变成: 4 5 6 7
2.4 从对头取出4 把4输出,它没有左孩子和右孩子 不用入队列
2.5 从对头取出5 把5输出, 它没有左孩子右孩子 不用入队列
2.6 从对头取出6 把6输出, 它没有左孩子右孩子 不用入队列
2.7 从对头取出7 把7输出, 它没有左孩子右孩子 不用入队列
2.8 队列空了,结束
深度优先遍历:又分为三种:先序 中序 后序
先序遍历(先输出根): 按照 根 左 右 的顺序 遍历结果:1 2 4 5 3 6 7
1 对于树根1,先输出1,然后再遍历它的左子树和右子树
1.1 对于左子树2是树根先输出2,再遍历它的左子树和右子树
1.1.1 对于左子树4 树根4输出,没有左右子树 不用向下遍历
1.1.2 对于右子树5 树根5输出 没有左右子树 不用向下遍历
1.2 对于右子树3树根3 输出3, 在遍历它的左子树和右子树
1.2.1 对于左子树6 输出根6 没有左右子树 不用向下遍历
1.2.2 对于右子树7 输出根7 没有左右子树 不用向下遍历
总结:先输出根,然后对左子树当成新树遍历,然后对右子树当成新树遍历,循环遍历到没有子树
中序遍历(中间输出根):按照 左 根 右 的顺序 遍历结果:4 2 5 1 6 3 7
1 对于树1 先对左子树遍历 再输出根 最后对右子树遍历
1.1 对于左子树2 先对左子树遍历 再输出根 最后对右子树遍历
1.1.1 对于左子树4,没有孩子了 输出树根 4
1.1.2 遍历完左子树了 输出根 2 再遍历右子树
1.1.3 对于右子树5,没有孩子了 输出树根 5
1.2 左子树2遍历完了 输出根 1 再遍历右子树 3
1.3 对于右子树3 先对左子树遍历 再输出根 最后对右子树遍历
1.3.1 对左子树6 没有孩子了 输出根6
1.3.2 左子树6遍历完了 输出根 3 再遍历右子树7
1.3.3 对于右子树7 没有孩子 输出根 7
后序遍历(最后输出根):按照 左 右 根 的顺序 遍历结果:4 5 2 6 7 3 1
1 对于树 先遍历左子树 再遍历右子树 最后输出根
1.1 对于左子树2 先遍历左子树 再遍历右子树 最后输出根
1.1.1对于左子树4 没有孩子了 输出根 4
1.1.2对于右子树5 没有孩子了 输出根 5
1.1.3左子树 右子树遍历完了输出根 2
1.2 对于右子树3 先遍历左子树 再遍历右子树 最后输出根
1.2.1 对于左子树6 没有孩子了 输出根 6
1.2.2 对于右子树7 没有孩子了 输出根 7
1.2.3 左右子树遍历完了 最后输出根 3
1。3 左右子树遍历完了 最后输出根 1
接下来 我们用python来实现一下各种操作!!!