python二叉树增加节点_python、java实现二叉树,细说二叉树添加节点、深度优先(先序、中序、后续)遍历 、广度优先 遍历算法...

代码捉襟见肘,欢迎批评指正 ^.^

先谈一下二叉树:

二叉树是常用的存储数据的方式。除了根节点之外,每个节点都有一个父节点,最多有两个子节点,左孩子和右孩子

对于二叉树有如下操作:

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来实现一下各种操作!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值