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

results matching ""

    No results matching ""