翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
ps:自己思考将其变形,不让其每次交换所有的左右结点,而是只交换当前的左右结点
输出:
4
/ \
7 2
/ \ / \
3 1 9 6
思路:不直接交换子结点,而是只交换当前结点的左右子结点值,再使交换函数递归至下一个左右结点
code:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
def reverse(root):
if root.left==None or root.right==None :
return
root1=root.left
temp=root1.val
root2=root.right
root1.val=root2.val
root2.val=temp
reverse(root.left)#这里和合并二叉树不一样,这里是在root.left的内存地址进行,是连续的
reverse(root.right)#同上
reverse(root)
return root