題目
給定一棵二叉樹,要求輸出其左右翻轉后二叉樹的中序遍歷。
例:
翻轉前: 翻轉后:
1 | 1
/ \ | / \
2 3 | 3 2
/ \ | / \
4 5 | 5 4
解析
兩個步驟:
- 鏡像翻轉:只需要遍歷二叉樹,每次訪問一個結點時,交換其左右孩子。
- 中序遍歷。
Python實現
# -*- coding:utf-8 -*-
class Node(object):
def __init__(self, value=None, lchild=None, rchild=None):
self.value = value
self.lchild = lchild
self.rchild = rchild
def mirror(root):
"""翻轉鏡像"""
if not root:
return
root.lchild, root.rchild = root.rchild, root.lchild
mirror(root.lchild)
mirror(root.rchild)
def in_order_traverse(root):
"""中序遍歷"""
if not root:
return
in_order_traverse(root.lchild)
print(root.value)
in_order_traverse(root.rchild)
if __name__ == '__main__':
root = Node(1, Node(2, Node(4), Node(5)), Node(3))
mirror(root) # 翻轉二叉樹
in_order_traverse(root) # 中序遍歷