如何在 Python 中创建二叉树?
How to create a Binary Tree in Python?
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def t():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
print(t)
你好,我已经尝试在上面创建一个二叉树,但是当我打印“t”时我没有设法打印出二叉树。
它向我展示了以下内容,而不是二叉树:
所以有两件事:
当您执行 print(t)
而不是 print(t())
时,会有所不同。 print(t)
打印函数对象本身,而 print(t())
打印由函数 return 编辑的结果。
但是,即使您执行后者,您也会打印 None
,因为 t()
不会 return 任何内容。您需要从 t()
return root
并且您还必须编写一个特殊函数来遍历树以打印每个节点的值(如果这是您想要的)
这是一个例子:
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def t():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
return root
def treeToString(root, level=0):
ret = "\t"*level+repr(root.data)+"\n"
if root.left != None:
ret += treeToString(root.left, level+1)
if root.right != None:
ret += treeToString(root.right, level+1)
return ret
print(treeToString(t()))
# if you want to assign the tree to an object then do this:
tree = t()
print(tree.left.data)
print(tree.right.data)
函数t
只是创建了一个二叉树。如果你想打印一棵树,你需要遍历它并打印它。根据您想要打印树的方式,有不同的遍历技术,其中流行的是 Inorder
、Preorder
和 Postorder
。检查此 wiki link 树遍历方法。
必须扩展您的代码才能执行所需的树遍历。示例如下:
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def t():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
return root
def in_order(root):
if root:
in_order(root.left)
print (root.data)
in_order(root.right)
def pre_order(root):
if root:
print (root.data)
pre_order(root.left)
pre_order(root.right)
def post_order(root):
if root:
post_order(root.left)
post_order(root.right)
print (root.data)
root = t()
print ("In Order")
in_order(root)
print ("Pre Order")
pre_order(root)
print ("Post Order")
post_order(root)
输出:
In Order
D
B
G
A
C
F
E
Pre Order
A
B
D
G
C
E
F
Post Order
D
G
B
F
E
C
A
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def tree():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
return root
t = tree()
print(t.left.data)
print(t.right.data)
print(t.root)
如何从这里访问树的根目录?
我试过打印 t.root 但它似乎有错误:(
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def t():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
print(t)
你好,我已经尝试在上面创建一个二叉树,但是当我打印“t”时我没有设法打印出二叉树。
它向我展示了以下内容,而不是二叉树:
所以有两件事:
当您执行 print(t)
而不是 print(t())
时,会有所不同。 print(t)
打印函数对象本身,而 print(t())
打印由函数 return 编辑的结果。
但是,即使您执行后者,您也会打印 None
,因为 t()
不会 return 任何内容。您需要从 t()
return root
并且您还必须编写一个特殊函数来遍历树以打印每个节点的值(如果这是您想要的)
这是一个例子:
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def t():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
return root
def treeToString(root, level=0):
ret = "\t"*level+repr(root.data)+"\n"
if root.left != None:
ret += treeToString(root.left, level+1)
if root.right != None:
ret += treeToString(root.right, level+1)
return ret
print(treeToString(t()))
# if you want to assign the tree to an object then do this:
tree = t()
print(tree.left.data)
print(tree.right.data)
函数t
只是创建了一个二叉树。如果你想打印一棵树,你需要遍历它并打印它。根据您想要打印树的方式,有不同的遍历技术,其中流行的是 Inorder
、Preorder
和 Postorder
。检查此 wiki link 树遍历方法。
必须扩展您的代码才能执行所需的树遍历。示例如下:
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def t():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
return root
def in_order(root):
if root:
in_order(root.left)
print (root.data)
in_order(root.right)
def pre_order(root):
if root:
print (root.data)
pre_order(root.left)
pre_order(root.right)
def post_order(root):
if root:
post_order(root.left)
post_order(root.right)
print (root.data)
root = t()
print ("In Order")
in_order(root)
print ("Pre Order")
pre_order(root)
print ("Post Order")
post_order(root)
输出:
In Order
D
B
G
A
C
F
E
Pre Order
A
B
D
G
C
E
F
Post Order
D
G
B
F
E
C
A
# Binary tree node
class node:
def __init__(self, data):
self.left=None
self.right=None
self.data=data
# Function to create a new
# Binary node
def newNode(data):
return node(data)
def tree():
root=newNode("A")
root.left = newNode("B")
root.right = newNode("C")
root.left.left = newNode("D")
root.left.right = newNode("G")
root.right.right = newNode("E")
root.right.right.left = newNode("F")
return root
t = tree()
print(t.left.data)
print(t.right.data)
print(t.root)
如何从这里访问树的根目录?
我试过打印 t.root 但它似乎有错误:(