【问题标题】: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