【问题标题】:Mirror Binary Search Tree镜像二叉搜索树
【发布时间】:2013-03-10 17:33:04
【问题描述】:

这段代码给出了二叉搜索树的根,用于创建它的镜像。

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 binary-search-tree


    【解决方案1】:

    没错,但不是很 Pythonic。

    最好只写

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

    对于这个问题,您可以按任一顺序进行递归(在父母之前或之后反转叶子)。

    【讨论】:

      【解决方案2】:

      这是我获取二叉搜索树镜像的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()
      

      输出:

      enter image description here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 2023-03-08
        • 1970-01-01
        • 2019-05-04
        相关资源
        最近更新 更多