捉急.. 挂在二叉树上下不来了

大家好,我是OnlyCoding

今天我有一些事情要和大家说说

很多人问你每天有那么多时间去学习、去整理这些东西吗?

说真的,没有

其实每天写公众号花费时间最多的地方就是格式整理,一整理就是好几个小时,就是把要写的内容放在一块,然后再整理成一篇文章

今天我看到一句话,让我继续坚持继续每天高质量推送文章

一边学、一边分享、一边找虐

身边的小伙伴已经开始刷题,大家都好卷

先放一张可爱的图,哈哈哈哈

aee0666e10d51e5e371db47a32347865.png

图片来源于网络

最近听到周围在讨论数据结构,在面试中经常遇到链表和树基于这两种数据结构扩展的题目

大家都这么卷,那今天晚上迫不得已先来整理一下关于树的一些内容,就准备开始刷一下关于树的算法题

在这之前我先来梳理一下常见的问题都有哪些

只要关于树结构的问题一般都涉及到树的遍历,分为先序遍历、中序遍历、后序遍历、层次遍历

29300a7b1b373d49456e14bf88a460e8.png

下面是力扣上关于上图分类中的一些题目

970df295ee3a563639dc0ff0b950ef98.png

有很多小伙伴说关于树的题目总是感觉有点难度,这个我确实也承认... 

但有人说树其实是最简单的,而且要把树放在刷题的第一位,因为树的问题涉及到的几项思维框架会贯穿到其它的编程中去

 

看到这里的小伙伴就可以开始和我一起刷题啦!

如果看不清上面的题目的话,看下面这里

以下是题目:

基础遍历
        144.二叉树的前序遍历
        94.二叉树的中序遍历
        145.二叉树的后序遍历
        102.二叉树的层序遍历
        107.二叉树的层序遍历 II
        589.N 叉树的前序遍历
        590.N 叉树的后序遍历
        429.N 叉树的层序遍历
遍历变种:自顶向下
        104.二叉树的最大深度
        112.路径总和
        113.路径总和 II
        437.路径总和 III
        257.二叉树的所有路径
        687.最长同值路径
        129.求根节点到叶节点数字之和
        988.从叶结点开始的最小字符串
遍历变种:非自顶向下
        124.二叉树中的最大路径和
        543.二叉树的直径
        652.寻找重复的子树
        235.二叉搜索树的最近公共祖先
        236.二叉树的最近公共祖先

上面指定的题目是21个题目

下面是闲聊内容

说说你一直坚持的一件事情是什么?

现在在看这篇文章的读者,可以说绝大多数是从事互联网技术方向的,不管现在的身份是学生还是已经在工作岗位耕耘多年的老同学,都深知数据结构和算法的重要性

Why?

就拿学生来说,除了每天做科研,大多数同学会涉及到工业界的工作,说白了就是“干活”

每天生活中很多事情的安排,可能给到 LeetCode 很少,但是坚持做吧,慢慢来,就是最快的!

在前几年,找互联网工作,只要熟悉会用ssh或ssm,再或者前端的框架什么的很快就可以找到一份非常满意的工作

但现在不行了,太卷了

978f2cdee23efba0cf32603a40222e4d.png

图片来源于网络

几乎所有厂都会要求深入理解数据结构和算法,不管是大厂还是小厂,因为这是一种思维方式,可以让CXY更容易的理解代码,能更好的对产品进行优化,不断地去迭代等等

END

好的,关于你提到的问题,可以用以下的 Python 代码实现二叉树的中序遍历和后序遍历的递归和非递归算法。运行前需要先构建一个二叉树,并将根节点传入函数中。 ```python # 二叉树节点定义 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right # 二叉树中序遍历 递归算法 def inorderRecursive(root): if not root: return [] res = [] res += inorderRecursive(root.left) res.append(root.val) res += inorderRecursive(root.right) return res # 二叉树中序遍历 非递归算法 def inorderIterative(root): if not root: return [] res = [] stack = [] while True: if root: stack.append(root) root = root.left else: if not stack: break node = stack.pop() res.append(node.val) root = node.right return res # 二叉树后序遍历 递归算法 def postorderRecursive(root): if not root: return [] res = [] res += postorderRecursive(root.left) res += postorderRecursive(root.right) res.append(root.val) return res # 二叉树后序遍历 非递归算法 def postorderIterative(root): if not root: return [] res = [] stack = [] while True: while root: if root.right: stack.append(root.right) stack.append(root) root = root.left root = stack.pop() if root.right and stack and root.right == stack[-1]: stack.pop() stack.append(root) root = root.right else: res.append(root.val) root = None if not stack: break return res # 构建一个二叉树 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.left = TreeNode(6) root.right.right = TreeNode(7) # 中序遍历 print("中序遍历 递归算法:", inorderRecursive(root)) print("中序遍历 非递归算法:", inorderIterative(root)) # 后序遍历 print("后序遍历 递归算法:", postorderRecursive(root)) print("后序遍历 非递归算法:", postorderIterative(root)) ``` 希望这个代码能够帮助到你,如果还有问题,欢迎提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值