我是C程序员。我是Python新手。在 C 中,当我们定义二叉树节点的结构时,我们将 NULL 分配给它的左右子节点,如下所示:
struct node
{
int val;
struct node *right ;
struct node *left ;
};
初始化节点时,我们写为:
val = some_value
right = NULL;
left = NULL;
现在我的问题是:如何在Python中为节点的左右指针分配NULL值?
我们如何针对 Python 版本的 NULL 进行测试?在 C 语言中它将是:
if( ptr->right == NULL )
谢谢!
Python中的所有对象都是通过引用实现的,因此源代码中不存在对象和对象指针之间的区别。
相当于
NULL
的 Python 称为 None
(好信息here)。由于 python 中的所有对象都是通过引用实现的,因此您可以将结构重写为如下所示:
class Node:
def __init__(self): #object initializer to set attributes (fields)
self.val = 0
self.right = None
self.left = None
然后它的工作原理非常像你所期望的:
node = Node()
node.val = some_val #always use . as everything is a reference and -> is not used
node.left = Node()
请注意,与 C 中的
NULL
不同,None
不是“指向无处的指针”:它实际上是 class NoneType
的唯一实例。
因此,由于 None
是一个常规对象,您可以像使用 node.left == None
测试任何其他对象一样测试它。但是,由于 None
是单例实例,因此使用 is
并比较引用相等性 被认为更惯用:
if node.left is None:
print("The left node is None/Null.")
left = None
left is None #evaluates to True
通常您可以使用
None
,但您也可以使用objc.NULL
,例如
import objc
val = objc.NULL
在 Python 中使用 C 代码时特别有用。
另请参阅:Python objc.NULL 示例
另外,我相信只测试对象本身而不进行比较,就可以验证 null/None。所以:
if val is null:
等于:
if val: