You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类实现树结构中self.left.PrintTree()与PrintTree逻辑解析

二叉搜索树PrintTree方法逻辑解析

你看到的这段代码实现的是二叉搜索树的中序遍历,两个疑问可以结合遍历规则和代码执行流程逐一解释:

self.left.PrintTree()的含义

  • 这是典型的递归调用写法:当当前节点存在左子节点时,优先执行左子节点的PrintTree方法,意思是在处理当前节点的打印逻辑前,先把整个左子树的所有节点按照相同的遍历规则全部处理完成。
  • 结合这个类的insert逻辑就能理解这么写的原因:二叉搜索树的插入规则是「值小于当前节点的放左子树,值大于当前节点的放右子树」,也就是说任意节点的左子树所有节点值都比当前节点小,右子树所有节点值都比当前节点大。

为什么print(self.data)只放在左递归之后

  • 这个打印位置不是随便放的,它刚好对应中序遍历「左子树 → 当前节点 → 右子树」的固定顺序,执行下来会天然得到二叉搜索树节点值的升序排列结果,也就是你运行得到的3、6、12、14输出。
  • 我们可以逐行拆解示例代码的执行流,逻辑会非常清晰:
    1. 从根节点12调用PrintTree(),检测到左子节点6存在,暂时不打印12,先调用6.PrintTree()
    2. 执行6.PrintTree()时,检测到左子节点3存在,暂时不打印6,先调用3.PrintTree()
    3. 执行3.PrintTree()时,检测到左子节点为空,不需要递归左子树,直接执行print(3);再检测右子节点也为空,3节点的遍历完成,回到上一层6的执行流程
    4. 回到6的执行流程时,左子树已经全部处理完,执行print(6);再检测右子节点为空,6节点遍历完成,回到上一层12的执行流程
    5. 回到12的执行流程时,左子树已经全部处理完,执行print(12);再检测到右子节点14存在,调用14.PrintTree()
    6. 执行14.PrintTree()时,检测到左子节点为空,直接执行print(14);再检测右子节点为空,14节点遍历完成,整个打印流程结束
  • 如果在左右分支都配置打印语句,同一个节点的值会被重复打印,遍历顺序也会被打乱,根本得不到有序的输出。你可以自行修改打印位置验证不同遍历效果:
    • 打印放在左递归前:是前序遍历,输出顺序为12、6、3、14
    • 打印放在右递归后:是后序遍历,输出顺序为3、6、14、12

附测试用例完整代码

class Node:
    
    def __init__(self, data):
        self.left = None
        self.right = None
        self.data = data
        
    def insert(self, data) : 
        if self.data :
            if data < self.data : 
                if self.left is None : 
                    self.left = Node(data) 
                else :
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else :
                    self.right.insert(data)
        else :
            self.data = data 
            
    def PrintTree(self) : 
        if self.left :
            self.left.PrintTree()
        print(self.data)
        if self.right  : 
            self.right.PrintTree()
      

root = Node(12)
root.insert(6)
root.insert(14)
root.insert(3)
root.PrintTree()

运行输出:

3
6
12
14

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:42:25