松桃和兴建设公司网站,wordpress 搜索报错,sakai wordpress,外包服务公司是干什么的本文讲解二叉树的前序遍历、后序遍历、中序遍历。
思路
每次写递归#xff0c;都按照这三要素来写#xff0c;可以保证大家写出正确的递归算法#xff01; 确定递归函数的参数和返回值#xff1a; 确定哪些参数是递归的过程中需要处理的#xff0c;那么就在递归函数里加…本文讲解二叉树的前序遍历、后序遍历、中序遍历。
思路
每次写递归都按照这三要素来写可以保证大家写出正确的递归算法 确定递归函数的参数和返回值 确定哪些参数是递归的过程中需要处理的那么就在递归函数里加上这个参数 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件 写完了递归算法, 运行的时候经常会遇到栈溢出的错误就是没写终止条件或者终止条件写的不对操作系统也是用一个栈的结构来保存每一层递归的信息如果递归没有终止操作系统的内存栈必然就会溢出。 确定单层递归的逻辑 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。 参考https://www.programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E6%80%9D%E8%B7%AF以c为例更容易理解
前序遍历144
# Definition for a binary tree node.
class TreeNode(object):def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right rightclass Solution(object):def preorderTraversal(self, root)::type root: TreeNode:rtype: List[int]if not root: # 确定终止条件return []# 单层递归逻辑left self.preorderTraversal(root.left)right self.preorderTraversal(root.right)return [root.val] left right # 用[]存储结果
后序遍历145
class TreeNode(object):def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right rightclass Solution(object):def postorderTraversal(self, root)::type root: TreeNode:rtype: List[int]if not root:return []left self.postorderTraversal(root.left)right self.postorderTraversal(root.right)return left right [root.val]中序遍历94
class TreeNode(object):def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right rightclass Solution(object):def inorderTraversal(self, root)::type root: TreeNode:rtype: List[int]if not root:return []left self.inorderTraversal(root.left)right self.inorderTraversal(root.right)return left [root.val] right