python求解二叉树前序/中序/后序遍历

二叉树的前序遍历

二叉树的中序遍历

二叉树的后序遍历

1.二叉树的前序遍历

给你二叉树的根节点root,返回它节点值的前序遍历
示例1:

python求解二叉树前序/中序/后序遍历_第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:

python求解二叉树前序/中序/后序遍历_第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:

python求解二叉树前序/中序/后序遍历_第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]

总结:对于二叉树的遍历求解,基本都是使用递归的方式。

递归到底是个啥?

递归,就是在运行的过程中调用自己。构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

那迭代是个啥?

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。

那递归和迭代有什么区别呢?

迭代和递归的区别:
从概念上讲:

  • 递归就是指程序调用自身的编程思想,即一个函数调用本身;
  • 迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。

简单地说,递归是重复调用函数自身实现循环;迭代是函数内某段代码实现循环。

你可能感兴趣的:(python)