[手记]基于Python完成二叉树销毁(递归)

方法实现

二叉树销毁过程是需要将存储在二叉树结点的内存空间释放和相应信息段删除。,再将二叉树置空。二叉树的销毁可利用先序遍历的思想,以左节点、右节点、根结点的遍历顺序来删除二叉树中每一个结点。

def destroy_tree(root):
    if root==Node:
        return
    if root.left:
        destroy_tree(root.left)
    if root.right:
        destroy_tree(root.right)
    root=None
    print("已销毁")

memory_profiler内存分析

memory_profiler是Python非常方便的内存分析工具,memory_profiler的具体使用可借鉴 →memory_profiler的使用
添加二叉树方法时,程序内存分析结果如下
在这里插入图片描述由分析结果可知:使用创建二叉树函数时,内存分配了18.8MB
销毁二叉树方法内存分析,结果如下
在这里插入图片描述对二叉树销毁方法进行内存分析,也看到了新增内存已经发生变动。

附录

本手记实现代码

from memory_profiler import profile


class Node:
    def __init__(self, data):
        self.left = None  # 左节点
        self.right = None  # 右节点
        self.data = data  # 值

#@profile
    def insert(self,value):
        if self.data:
            if value<self.data:
                if self.left is None:
                    self.left=Node(value)
                else:
                    self.left.insert(value)
            elif value>self.data:
                if self.right is None:
                    self.right=Node(value)
                else:
                    self.right.insert(value)
        else:
            self.data=value



    def PreorderTraversal(self, root):
        res = []
        if root:
            res.append(root.data)
            res = res+self.PreorderTraversal(root.left)
            res = res + self.PreorderTraversal(root.right)
        return res

    def inorderTraversal(self,root):
        res=[]
        if root:
            res=self.inorderTraversal(root.left)
            res.append(root.data)
            res=res+self.inorderTraversal(root.right)
        return res

    def PostorderTraversal(self, root):
        res = []
        if root:
            res = self.PostorderTraversal(root.left)
            res = res + self.PostorderTraversal(root.right)
            res.append(root.data)
        return res


#@profile
def destroy_tree(root):
    if root==Node:
        return
    if root.left:
        destroy_tree(root.left)
    if root.right:
        destroy_tree(root.right)
    root=None
    print("已销毁")

if __name__ == "__main__":
    root = Node(12)
    root.insert(6)
    root.insert(14)
    root.insert(3)
    print(root.PreorderTraversal(root))
    print(root.inorderTraversal(root))
    print(root.PostorderTraversal(root))
    destroy_tree(root)
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页