递归递归先递后归二叉树与递归(回溯)

浅谈个人对二叉树递归理解
三句话总结
分而治之
先递后归
归即是回溯
二叉树是一个大的树有左子树和右子树,我要对整个二叉树做后序遍历,宏观上看,就是把整个二叉树按照左右根的顺序遍历一遍,放进一个列表。但是二叉树有左有右,每个二叉树又看成是分裂成很多很多个小的二叉树,刚刚说了,宏观上,我是左右根的顺序遍历。好,现在来到左边,左边也是一个独立的二叉树,也是要左右根的顺序遍历的,好,那就从头到尾,尾巴就是叶子结点,终止条件就是root当前节点是空的说明没了就停了。好,现在左边二叉树开始遍历,左中根,这时候发现,左边的二叉树也是,可以看成,有一个中间的根,左边有个二叉树,右边有个二叉树,好,那现在就对左边的二叉树开始左右根遍历。。。一层一层和套娃一样,其实从宏观到微观,都是在执行一模一样的事情,都是左右根的遍历,只是它不断的分叉,所以,一直一直在往下面递,是的,在递,那啥时候归?就是碰到终止条件的时候。所以,递归函数一上来你就先确定一个终止条件,不然肯定栈溢出,因为他一直再往下递,你不给一个终止条件,她不知道深度的,就一直蒙着头往下递,你得让她归。回到二叉树这,实际上,就是大的分裂成小的,小的分裂成更小的但是!总体上的逻辑是一样的,左右根的遍历,并且放进去一个列表。那就写一个递归函数,不停的调用自身,在自己内部,往深处边递边把值添加进去列表。

说到返回值,需要注意,返回值的顺序是什么?注意我这里说的顺序不是前序后续中序遍历这种,而是,把值,归到结果列表里面的顺序。
一句话,最深的最先归!
意思是,返回值的时候,应该是最深处,就是碰到终止条件那个最深处的值先进到结果列表。就是往深处分叉的时候碰到终止条件了就往回归。
在递归的过程中,先处理最深层的节点,然后逐步向上返回。递归函数在遇到终止条件时返回,然后每层递归都会逐步向上返回结果。这个过程可以用“先递后归”来形容,即先递归到最底层,然后逐层返回。

代码实现

class TreeNode:
    def __init__(self, value=0, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right

def postorder_traversal(root):
    # 基本情况:如果当前节点为空,则返回一个空列表
    if root is None:
        return []
    
    # 创建一个空列表用于存储结果
    result = []
    
    # 递归处理左子树
    # 将左子树的后序遍历结果添加到 result 中
    result.extend(postorder_traversal(root.left))
    
    # 递归处理右子树
    # 将右子树的后序遍历结果添加到 result 中
    result.extend(postorder_traversal(root.right))
   
    # 处理当前节点
    # 将当前节点的值添加到 result 中
    result.append(root.value)
    
    return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值