层次遍历二叉树(python)

本文介绍了一种按层打印二叉树的方法,通过使用队列实现,能够依次打印出每一层的节点值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#按层打印
def printByLevel(root):
    if not root:
        return
    print("Print binary tree by level")
    queue = []
    queue.append(root)
    last = root
    level = 1
    print("Level " + str(level) + ':', end=' ')
    while queue:
        root = queue.pop(0)
        print(root.val, end=' ')
        if root.left:
            nlast = root.left
            queue.append(root.left)
        if root.right:
            nlast = root.right
            queue.append(root.right)
        if root == last and queue:
            last = nlast
            print()
            level += 1
            print("Level " + str(level) + ":", end=' ')

 

### 实现中序遍历二叉树Python代码 以下是基于递归方法实现的二叉树中序遍历代码: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def inorderTraversal(root: TreeNode): result = [] def dfs(node): if not node: return dfs(node.left) # 访问左子树 result.append(node.val) # 处理当前节点 dfs(node.right) # 访问右子树 dfs(root) return result ``` 此代码通过定义一个辅助函数 `dfs` 来完成递归操作。它首先访问左子树,接着处理当前节点并将它的值添加到结果列表中,最后再访问右子树[^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: TreeNode): result = [] stack = [] 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 ``` 该迭代方法利用了一个额外的数据结构——栈,用来保存尚未完全访问过的节点路径上的信息。每次循环都会尝试沿着最左侧分支深入下去直到尽头为止;一旦到达底部或者无法进一步前进时便回溯至上一层次,并转向右侧部分重复相同逻辑直至整个树被完整扫描一遍[^5]。 另外还有一种混合标记法可用于解决这一问题,即借助布尔标志区分实际数据项与待探索区域之间的差异以便更精确控制流程走向: ```python class Solution: def inorderTraversal(self, root): result = [] if not root: return result stack = [(False, root)] while stack: is_root, node = stack.pop() if not node: continue if is_root: result.append(node.val) else: stack.append((False, node.right)) stack.append((True, node)) stack.append((False, node.left)) return result ``` 这种方法巧妙地运用了元组形式记录每一个即将处理的对象及其状态(是否已作为根节点对待过),从而有效规避了一些潜在错误风险同时保持清晰易懂的整体架构设计思路[^2]。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值