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

Python二叉树翻转中Node初始化打印与赋值后访问的疑问

问题

我正在尝试用Python实现二叉树翻转,编写了如下代码:

class Node:
   def __init__(self, data):
      self.left = None
      self.right = None
      self.data = data
      print(self.left)
      print(self.right)
          

   def PrintTree ( self ) :
       if self.left :
           self.left.PrintTree ()
       print ( self.data, end= ' ' ) ,
       if self.right :
           self.right.PrintTree ()

class Solution:
    '''
    Function to invert the tree
    '''
    def invertTree(self, root):
       if root == None:
           return
       root.left, root.right = self.invertTree(root.right),self.invertTree(root.left)
       return root

if __name__ == '__main__':
    
    Tree = Node(10)
   
    Tree.left = Node(20)
    print(Tree.left.data)
    Tree.right = Node(30)
    print(Tree.right.data)
    Tree.left.left = Node(40)
    Tree.right.right = Node(50)
    print('Initial Tree :',end = ' ' )
    Tree.PrintTree()
    Solution().invertTree(root=Tree)
    print('\nInverted Tree :', end=' ')
    Tree.PrintTree()

运行后输出如下:

None
None
None
None
20
None
None
30
None
None
None
None
Initial Tree : 40 20 10 30 50 
Inverted Tree : 50 30 10 20 40 

我对此感到疑惑:在Node类的__init__方法中打印self.left和self.right时,结果都是None;但在主函数中,我可以通过Tree.left.data、Tree.right.data访问到对应的值,既然初始化时打印的是None,那给tree.left和tree.right赋值的意义是什么?

解答

这是因为初始化和赋值是两个完全不同的时机,理清时间线就能明白:

  1. 当执行Tree = Node(10)时,会调用Node的__init__方法,此时self.left和self.right被初始化为None,所以打印出两个None。这时候Tree对象的left和right确实是None。
  2. 之后执行Tree.left = Node(20):
    • 先创建Node(20)对象,调用它的__init__,打印两个None;
    • 再把这个新创建的Node对象赋值给Tree的left属性。此时Tree.left就不再是None,而是指向了Node(20)对象,所以你能通过Tree.left.data访问到20。
  3. 同理,Tree.right = Node(30)也是一样的逻辑:创建Node(30)时打印两个None,再把它赋值给Tree.right,此时Tree.right就变成了这个Node对象。

简单来说,初始化时的None是每个Node对象刚诞生时的默认状态,后续的赋值操作是在给这些Node对象的left/right属性“挂载”其他Node节点,从而构建出二叉树的层级结构。如果不做这些赋值,所有节点的左右子节点都会一直是None,根本构不成树。

你代码里的赋值操作正是在搭建二叉树的关系——让根节点Tree拥有左子节点20和右子节点30,再让20拥有左子节点40,30拥有右子节点50,这样才能形成可遍历、可翻转的树结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:40:23