二叉树的中序遍历-python

本文介绍了一种实现二叉树中序遍历的方法,使用递归思想将节点值打印出来,通过栈来辅助遍历过程,确保左子树先于根节点和右子树被访问。
def mid_order(root):
    if root == None:
        print("")

    stack = []
    stack.append(root)
    while len(stack) or root != None:
        if root != None:
            stack.append(root.left)  # 只负责进
            root = root.left
        else:
            pop = stack.pop() # 只负责出
            print(pop.val)
            root = root.right

 

### Python实现二叉树的中序遍历Python中,可以通过递归方法或者迭代方法(借助栈)来实现二叉树的中序遍历。以下是两种常见的实现方式。 #### 方法一:递归法 递归是一种直观且简洁的方式来实现中序遍历。其基本逻辑是从当前节点出发,先递归处理左子树,再访问根节点,最后递归处理右子树[^1]。 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def inorderTraversal(root: 'Optional[TreeNode]') -> list[int]: result = [] def dfs(node): if not node: return # 递归处理左子树 dfs(node.left) # 访问根节点 result.append(node.val) # 递归处理右子树 dfs(node.right) dfs(root) return result ``` 此代码通过定义内部函数`dfs`完成递归操作,并将结果存储到列表`result`中[^5]。 --- #### 方法二:迭代法(基于栈) 对于不希望使用递归的情况,可以采用显式的栈数据结构模拟递归过程。这种方法同样遵循“左子树 → 根节点 → 右子树”的顺序[^4]。 ```python def inorderTraversal_iterative(root: 'Optional[TreeNode]') -> list[int]: stack, result = [], [] current = root while current or stack: # 不断向左深入并压入栈 while current: stack.append(current) current = current.left # 当前无左子树可走,则弹出栈顶元素作为当前节点 current = stack.pop() result.append(current.val) # 处理当前节点 # 转向右子树继续遍历 current = current.right return result ``` 上述代码利用了一个外部维护的栈`stack`,当遇到某个节点有左孩子时将其不断压入栈;直到没有更多左孩子为止,才开始依次弹出栈中的节点进行处理。 --- ### 总结 无论是递归还是迭代的方式都可以很好地解决二叉树的中序遍历问题。其中递归版本更加简单易懂,而迭代版则避免了因深层嵌套调用可能导致的堆栈溢出风险,在某些场景下可能更优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值