给你二叉树的根节点root,返回它节点值的前序遍历
示例1:
输入:root=[1,null,2,3]
输出:[1,2,3]
二叉树的前序遍历即为:先根节点,再左节点,最后再右节点。可以使用递归的方式求解
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
if root==None:
return []
else:
return [root.val]+self.preorderTraversal(root.left)+self.preorderTraversal(root.right)
2.二叉树的中序遍历
给定一个二叉树的根节点root,返回它的中序遍历。
示例2:
输入:root=[1,null,2,3]
输出:[1,3,2]
二叉树的中序遍历即为:先左节点,再根节点,最后再右节点。可以使用递归的方式求解
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if root==None:
return []
else:
return self.inorderTraversal(root.left)+[root.val]+self.inorderTraversal(root.right)
3.二叉树的后序遍历
给定一个二叉树的根节点root,返回它的后序遍历。
示例3:
输入:root=[1,null,2,3]
输出:[3,2,1]
二叉树的后序遍历即为:先左节点,再右节点,最后再根节点。可以使用递归的方式求解
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
if root==None:
return []
else:
return self.postorderTraversal(root.left)+self.postorderTraversal(root.right)+[root.val]
总结:对于二叉树的遍历求解,基本都是使用递归的方式。
递归到底是个啥?递归,就是在运行的过程中调用自己。构成递归需具备的条件:
- 子问题须与原始问题为同样的事,且更为简单;
- 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。
那递归和迭代有什么区别呢?迭代和递归的区别:
从概念上讲:
- 递归就是指程序调用自身的编程思想,即一个函数调用本身;
- 迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。
简单地说,递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环



