python - 我们如何在 Django 中显示和存储二叉搜索树
问题描述
我已经为二叉搜索树编写了程序,但不知道如何将它保存在 Django 数据库中。我如何将其存储在模型中:
from __future__ import print_function
class Node:
# Constructor to initialize data
# If data is not given by user,its taken as None
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
# __str__ returns string equivalent of Object
def __str__(self):
return "Node[Data = %s]" % (self.data,)
class BinarySearchTree:
def __init__(self):
self.root = None
在二叉搜索树中插入值时,我们首先检查该值是否大于、小于或等于树的根。我们将当前节点初始化为根。如果该值大于当前节点值,那么我们知道它的正确位置将在右子树中。所以我们将当前元素作为正确的节点。如果该值小于当前节点值,那么我们知道它的正确位置将在左子树中。所以我们把当前元素作为左节点。如果该值等于当前节点值,那么我们知道该值已经包含在树中,不需要重新插入。所以我们打破了循环。
def insert(self, val):
if (self.root == None):
self.root = Node(val)
else:
current = self.root
while 1:
if (current.data > val):
if (current.left == None):
current.left = Node(val)
break
else:
current = current.left
elif (current.data < val):
if (current.right == None):
current.right = Node(val)
break
else:
current = current.right
else:
break
在前序遍历中,我们首先打印当前元素,然后移动到左子树,最后到右子树。
def preorder(self, node):
if (node == None):
return
else:
print(node.data, end=" ")
self.preorder(node.left)
self.preorder(node.right)
在中序遍历中,我们首先移动到左子树,然后打印当前元素,最后移动到右子树。
#Important : Inorder traversal returns the elements in sorted form.
def inorder(self, node):
if (node == None):
return
else:
self.inorder(node.left)
print(node.data, end=" ")
self.inorder(node.right)
在后序遍历中,我们首先移动到左子树,然后到右子树,最后打印当前元素。
def postorder(self, node):
if (node == None):
return
else:
self.postorder(node.left)
self.postorder(node.right)
print(node.data, end=" ")
tree = BinarySearchTree()
tree.insert(1)
tree.insert(9)
tree.insert(4)
tree.insert(3)
tree.insert(5)
tree.insert(7)
tree.insert(10)
tree.insert(0)
print ("Preorder Printing")
tree.preorder(tree.root)
print("\n\nInorder Printing")
tree.inorder(tree.root)
print("\n\nPostOrder Printing")
tree.postorder(tree.root)
用户可以添加和删除树,在添加树时,应提示用户输入至少 3 个节点... 选择树时应显示二叉搜索树结构,其各个节点按插入顺序排列。 ....如何才能将用户所做的所有更改都反映回数据库中..