二叉树的前中后序遍历

二叉树的概念

二叉树是n个节点的有限集,它是空集,或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。

二叉树不是树的特殊情况,且二叉树结点的子树要区分左子树和右子树,即使只有一个子树也要说明区分它是左子树和右子树。

完全二叉树:除底层之外所有层都是满的,而且最底层从左到右是连续的

满二叉树:每一层的结点都达到最大值

二叉树的遍历

遍历定义: 顺着某一条搜索路径 巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。

目的:得到所有结点的一个线性排列

用途:树结构插入,删除,修改,查找和排序运算的前提。

先序遍历:根->左->右

中序遍历:左->根->右

后序遍历:左->右->根

当我们编写二叉树遍历代码的时候,我们可以按照下边的步骤进行

1.确定递归函数的参数和返回值

2.确定终止条件

3.确定单层遍历的逻辑

前序遍历
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def preorderTraversal(self, root):
        result = []
        
        if root:
            result.append(root.val)
            result += self.preorderTraversal(root.left)
            result += self.preorderTraversal(root.right)   
        
        return result
中序遍历
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
       def inorderTraversal(self, root):
        result = []
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        def traversal(root):

            if root:
                traversal(root.left)
                result.append(root.val)
                traversal(root.right)
                
            else:
                return
        traversal(root)
        return result         
        
后序遍历
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    
    def postorderTraversal(self, root):
        result = []
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        def traversal(root):

            if root:
                traversal(root.left)
                traversal(root.right)
                result.append(root.val)
            else:
                return
        traversal(root)
        return result            

            
            

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值