Binary Tree Upside Down
这道题最关键在于看清楚和分析清楚题里面树的结构,简单来说就是每个右结点要不是叶子节点且有一个左兄弟,要不就是空,这也意味着每一个结点的右孩子要不只有一个节点,要不啥也没有,所以我们遍历翻转是可以只遍历根节点的左孩子这一条线的,另外helper函数在这里一定不能返回值,这很关键,不然会造成树结点直接的连成一个死结
# 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):
newRoot = None
def upsideDownBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
if not root:
return None
self.helper(root)
return self.newRoot
def helper(self, cur):
if not cur.left:
self.newRoot = cur
return
self.helper(cur.left)
cur.left.right = cur
cur.left.left = cur.right
cur.left = None
cur.right = None