首页 > 解决方案 > 这个二叉树的删除节点功能是否正确?

问题描述

我已经实现了一个删除函数,它从二叉树中删除一个特定节点。num_child() 返回节点的子节点数,get_left() 返回左子节点等等。它适用于我拥有的所有情况试过了。我想知道代码是否正确?有什么方法可以简化代码吗?

    def _delete(self):
        
        # if the node has 2 children
        if self.num_child() == 2:
            print("Cannot delete the node coz it has two child")

        # if the node has 1 child
        
        if self.num_child() == 1:
            #if left child is present
            if self.get_left() is not None:
                
                child=self.left
                #for root condition
                if self.parent is None:
                    self.left.parent = None
                    self.left= None

                else:
                    self.left.parent = self.parent
                    if self.data is self.parent.get_left():
                        self.parent.left = self.left
                    if self.data is self.parent.get_right():
                        self.parent.right = self.left

            #if right child is present
            if self.get_right() is not None:
                
                #for root condition
                if self.parent is None:
                    self.right.parent = None
                    self.right= None

                else:
                    self.right.parent = self.parent
                    if self.data is self.parent.get_left():
                        self.parent.left = self.right
                    if self.data is self.parent.get_right():
                        self.parent.right = self.right
            print(f"{self.data} has been deleted")
            return
        if self.num_child() == 0:
            if self.data is self.parent.get_left():
                self.parent.left = None
                self.parent= None
                
            elif self.data is self.parent.get_right():
                self.parent.right = None
                self.parent= None
                

            print(f"{self.data} has been deleted")

标签: pythonbinary-tree

解决方案


推荐阅读