二叉树的层序遍历_树与二叉树迭代版c++

树与二叉树

f8d4a0f20f52990baec2445418325935.gif

总算把你给盼来了

现在才关注我 确实是晚了点

但没关系 来了就好

38646895504fdd7bccd7b90cf636af2b.gif

工具:vs code 、ppt

操作系统:Linux

429e8e72a9cf890241f621c4fe052f40.gif 429e8e72a9cf890241f621c4fe052f40.gif(修改) ffe9fd7ffef87d551ece049f46c6668c.gifSUMMER

8c563030ebf447f23dffa2ead52f89a6.gif

目录

6028f0b944567f19d01860115bf63435.png

4ea6fd3b46ffde392eb8e1241bfcb81d.png

1.二叉树

f37d77ce15f30c52723b291f8c0f0539.png

图2B

2.定义: 二叉树(binary tree)T是有限个元素的集合(可以为空)。当二叉树非空时,其中有一个元素称为,余下的元素(如果有的话)被划分成两棵二叉树,分别称为t的左子树右子树。 2.1特点:

a.二叉树的每个元素都恰好有两棵子树(其中一个或两个可能为空)。

b.二叉树中的每个元素的子树都是有序的,也就是说,有左子树和右子树之分。


e2fac7544a9178abdf38aba9ab61dc75.png

原题来自力扣 3ef963ac56ea41eeb243c93389abfb47.gif fa83a20e4d2337a9a5d8d86e4d65a818.gif fb916f8f15e7f239e21d8071480197b9.gif

3.二叉树的遍历迭代

二叉树的存储结构——链式存储

二叉树的存储结构——链式存储(二叉链表)

TreeNode.h文件

1d839fe469276c30620c1d8a308b5e43.png

结构:

ac5ed416434ccb5f8ec2b6366cf5e983.png


一、前序遍历与中序遍历构建二叉树:

01 解释:

9afff4cdf642b771d9b8b5901b2ce4d8.png

c302f5f7098af7b4c4558d47d1e498dc.png

a57974fb2e066a28987499ae1f6a38ee.png

02 实现:

1e13c55233867539c2a3877802b81eb9.png

详细解释:力扣105题


二、中序遍历与后序遍历构建二叉树:

01 解释:

c6ee5bc4787babcbd9280d3805c6e087.png

98b1dd091c546d4f4f83053b52002173.png

3bcf73af5a52c8019d0f1af3f2c5fada.png

02 实现:

79e1ef173e48ac352dca81308702e046.png

详细解释:力扣106题


三、前序遍历与后序遍历构建二叉树:

01 解释:

09061c1d1041006f88547282b43101bf.png

6a08234ec93465a9cade575ff9228cc3.png

8476ff495798e8cbe0284556ae59931e.png

02 实现:

2122c7f8b19bbc1545426dab5e87eaf1.png

详细解释:力扣889题


3.1、二叉树的四种遍历(迭代):

    遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。                                                       ——《百度百科》 b35a8fdc79dd2ec4ff443d7a76365683.gif01 前序遍历(迭代): 首先访问根,再先序遍历左子树,最后遍历右子树。

42b03efc6eb48226ee64f3444044e3bd.png

41276fc139b2a3579fba3ddf380ac38d.png

算法复杂度

时间复杂度:访问每个节点恰好一次,时间复杂度为O(N) ,其中N是节点的个数,也就是树的大小。

空间复杂度:取决于树的结构,最坏情况存储整棵树,因此空间复杂度是O(N)

详细解释:力扣144题


02 中序遍历(迭代): 首先遍历左子树,再访问,最后遍历右子树。

830f2fda0b970ac745c0664d7563bca3.png

25637a3770ccfd04bf101a95d7738019.png

算法复杂度

时间复杂度:访问每个节点恰好一次,时间复杂度为O(N) ,其中N 是节点的个数,也就是树的大小。

空间复杂度:取决于树的结构,最坏情况存储整棵树,因此空间复杂度是 O(N)

详细解释:力扣94题



03 后序遍历(迭代): 首先遍历左子树,再遍历右子树,最后访问

4a8db57b7cb666af619d883e5245e3dd.png

861828e62be60468c091c13eae058b23.png

算法复杂度

时间复杂度:访问每个节点恰好一次,时间复杂度为O(N) ,其中N 是节点的个数,也就是树的大小。

空间复杂度:取决于树的结构,最坏情况存储整棵树,因此空间复杂度是 O(N)

详细解释:力扣145题


04 层序遍历

77bad3949bf92f6650249ee498ec0d3b.png

方法1:

861828e62be60468c091c13eae058b23.png

(图1)

方法2:

(图2)

5e9428697fbc309d943c575c48fde15a.png

方法1与方法2区别:

 1.方法1是从一维的角度上实现层序遍历,方法2是从二维的角度上实现层序遍历。

 2.方法2在遍历第i层时,会返回该层的2i-1(i>=1)个元素。然后进行根出左右孩子进。

e89ae077a167a102fc90f3e523010d45.png

详细解释一维与二维的遍历的区别  力扣102题

算法复杂度

记树上所有节点的个数为n。

时间复杂度:每个点进队出队各一次,故渐进时间复杂度为 O(n)

空间复杂度:队列中元素的个数不超过 n 个,故渐进空间复杂度为 O(n)

3.3、main()调用

60d246aa6af3d95298213cfabaefed42.png

上述以“力扣【https://leetcode-cn.com/】”为模型,实现迭代版二叉树。

da0caf5673060a852c450fbfb1f2ee3b.gif

《栈c++》

《队列c++》

《树与二叉树递归版c++》

a85cee20f4221e67fdc6fc9e9c573e2c.png

a86c49ef0464b6107bed713b17fc6e94.gif

部分图片来源网络

侵删致歉

a53b29506c897ce879810b754235c3a7.gif

转载需经同意并引用出处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值