首页 > 解决方案 > 我们如何在 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 个节点... 选择树时应显示二叉搜索树结构,其各个节点按插入顺序排列。 ....如何才能将用户所做的所有更改都反映回数据库中..

标签: pythondjangodjango-modelsdjango-viewsbinary-tree

解决方案


推荐阅读