Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 镜像二叉搜索树_Python_Binary Search Tree - Fatal编程技术网

Python 镜像二叉搜索树

Python 镜像二叉搜索树,python,binary-search-tree,Python,Binary Search Tree,这是一段代码,给定一个二叉搜索树的根,就是创建它的镜像 def mirror(root): if root is None: pass else: mirror(root.left) mirror(root.right) temp = root.left root.left = root.right root.right = temp 首先,这段代码正确吗?这里的递归应该首先到达树的

这是一段代码,给定一个二叉搜索树的根,就是创建它的镜像

def mirror(root):
    if root is None:
        pass
    else:
        mirror(root.left)
        mirror(root.right)
        temp = root.left
        root.left = root.right
        root.right = temp

首先,这段代码正确吗?这里的递归应该首先到达树的叶子,然后在展开时切换引用吗?

是正确的,但不是很像python

还是写吧

def mirror(root):
    if root is None:
        return
    mirror(root.left)
    mirror(root.right)
    root.left, root.right = root.right, root.left

对于这个问题,可以按任意顺序递归(在父级之前或之后反转叶子)

没错,但不是很像蟒蛇

还是写吧

def mirror(root):
    if root is None:
        return
    mirror(root.left)
    mirror(root.right)
    root.left, root.right = root.right, root.left

对于这个问题,可以按任意顺序递归(在父级之前或之后反转叶子)

这是我的python代码,用于获取二进制搜索树的镜像。可能有一些不正确的缩进

#Binary Tree Node

class Node:

    def __init__(self,item):
        self.data = item
        self.left = None
        self.right = None

#Binary search tree
class binarySearchTree:
    def __init__(self):
        self.root = Node(None)

    def mirror(self,node):

        if node is None:
            return False
        elif self.root.data == node:
            self.root.left,self.root.right = self.root.right,self.root.left
            if self.root.left != None:
                self._mirror(self.root.left)
                if self.root.right != None:
                    self._mirror(self.root.right)
            else:
                return self.root

    def _mirror(self,node):
        if node is None:
            return False
        else:
            node.left,node.right = node.right,node.left
            if node.left != None:
                self._mirror(node.left)
                if node.right != None:
                    self._mirror(node.right)

            else:
                return node
    def inorder_traverse(self):
        if self.root != None:
            self._inorder(self.root)

    def _inorder(self,cur):
        if cur != None:
            if cur.left is not None:
                self._inorder(cur.left)

            print(cur.data)

            if cur.right != None:
                self._inorder(cur.right)
def main():
    bst = binarySearchTree()
    bst.insert(7)
    bst.insert(1)
    bst.insert(0)
    bst.insert(3)
    bst.insert(2)
    bst.insert(5)
    bst.insert(4)
    bst.insert(6)
    bst.insert(9)
    bst.insert(8)
    bst.insert(10)
    bst.insert(11)
    bst.inorder_traverse()
    bst.mirror(7)
    bst.inorder_traverse()
输出:


这是我的python代码,用于获取二进制搜索树的镜像。可能有一些不正确的缩进

#Binary Tree Node

class Node:

    def __init__(self,item):
        self.data = item
        self.left = None
        self.right = None

#Binary search tree
class binarySearchTree:
    def __init__(self):
        self.root = Node(None)

    def mirror(self,node):

        if node is None:
            return False
        elif self.root.data == node:
            self.root.left,self.root.right = self.root.right,self.root.left
            if self.root.left != None:
                self._mirror(self.root.left)
                if self.root.right != None:
                    self._mirror(self.root.right)
            else:
                return self.root

    def _mirror(self,node):
        if node is None:
            return False
        else:
            node.left,node.right = node.right,node.left
            if node.left != None:
                self._mirror(node.left)
                if node.right != None:
                    self._mirror(node.right)

            else:
                return node
    def inorder_traverse(self):
        if self.root != None:
            self._inorder(self.root)

    def _inorder(self,cur):
        if cur != None:
            if cur.left is not None:
                self._inorder(cur.left)

            print(cur.data)

            if cur.right != None:
                self._inorder(cur.right)
def main():
    bst = binarySearchTree()
    bst.insert(7)
    bst.insert(1)
    bst.insert(0)
    bst.insert(3)
    bst.insert(2)
    bst.insert(5)
    bst.insert(4)
    bst.insert(6)
    bst.insert(9)
    bst.insert(8)
    bst.insert(10)
    bst.insert(11)
    bst.inorder_traverse()
    bst.mirror(7)
    bst.inorder_traverse()
输出: