2023-12-12 树的前中后各种遍历玩法

树的前中后各种遍历方法

前序遍历、中序遍历、后序遍历是怎么样的!头结点参考它们前,中,后就可以了!
也就是前序遍历,头节点最先遍历,后是左节点,再是有节点!
中序遍历,左叶子节点,头节点结点,再到右节点!
后序遍历,左叶子节点,右叶子节点,再到头结点

第一种递归遍历:

递归遍历三要素:

① 确定递归的参数以及返回值

② 确定终止条件

③ 确定单层递归逻辑

前序:
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        left = self.preorderTraversal(root.left)
        right = self.preorderTraversal(root.right)

        return [root.val] + left +right
    	# 中序
        return left + [root.val] + right
    	# 后序
        return left + right + [root.val] 

第二种统一遍历

那我们就将访问的节点放入栈中,把要处理的节点也放入栈中但是要做标记。

如何标记呢,就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。 这种方法也可以叫做标记法。

def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        stack = []
        if root:
            stack.append(root)
        while stack:
            node = stack.pop()
            if not node is None:
                if node.right:
                    stack.append(root.right)
                if node.left:
                    stack.append(root.left)
                # 下面这两行移动就上下就是中序、后序遍历了!
                stack.append(node)
                stack.append(None)
            else:
                node = stack.pop()
                result.append(node.val)
        return result

第三种使用栈来遍历的

前序:

二叉树前序遍历(迭代法)

中序:

二叉树中序遍历(迭代法)

后序:

再来看后序遍历,先序遍历是中左右,后续遍历是左右中,那么我们只需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了,如下图:

前序到后序

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值