如何在python中为指针分配NULL值?

sdr*_*eam 47 python

我是C程序员.我是python的新手.在C中,当我们定义二叉树节点的结构时,我们为它的右边和左边的子节点分配NULL:

struct node 
{
    int val;  
    struct node *right ;  
    struct node *left ;  
};   
Run Code Online (Sandbox Code Playgroud)

在初始化节点时,我们写为:

val = some_value  
right = NULL;  
left = NULL;  
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如何在Python中为节点的左右指针分配NULL值?

我们如何测试Python版本的NULL?在C中它将是:

if( ptr->right == NULL )
Run Code Online (Sandbox Code Playgroud)

谢谢!

App*_*ish 61

python中的所有对象都是使用引用实现的,因此代码中不存在对象和指向对象的指针之间的区别.

NULL调用python等价物None(这里有好的信息).由于python中的所有对象都是使用引用实现的,因此您可以重新编写结构,如下所示:

class Node:
    def __init__(self): #object initializer to set attributes (fields)
        self.val = 0
        self.right = None
        self.left = None
Run Code Online (Sandbox Code Playgroud)

然后它的工作方式与您期望的非常相似:

node = Node()
node.val = some_val #always use . as everything is a reference and -> is not used
node.left = Node()
Run Code Online (Sandbox Code Playgroud)

请注意,与NULLC 中的不同,None它不是"指向无处的指针":它实际上是一个实例class NoneType.因此,作为None一个对象,您可以像任何其他对象一样测试它:

if node.left == None:
   print("The left node is None/Null.")
Run Code Online (Sandbox Code Playgroud)

虽然因为None 是单例实例,但使用is和比较引用相等性被认为更惯用:

if node.left is None:
   print("The left node is None/Null.")
Run Code Online (Sandbox Code Playgroud)


lim*_*to0 9

left = None

left is None #evaluates to True
Run Code Online (Sandbox Code Playgroud)