题解 | #二叉树的镜像#
二叉树的镜像
https://www.nowcoder.com/practice/a9d0ecbacef9410ca97463e4a5c83be7
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param pRoot TreeNode类 # @return TreeNode类 # class Solution: # def Mirror(self , pRoot: TreeNode) -> TreeNode: # # write code here # """ # method_1: 递归 # 步骤: # step1: 先深度最左端的节点,遇到空树返回,处理最左端的两个子节点交换位置 # step2: 进入右子树, 继续按照先做后右再回中的方法访问 # step3: 再返回到父问题,交换父问题的两个子节点的值 # """ # if not pRoot: # return None # left = self.Mirror(pRoot.left) # right = self.Mirror(pRoot.right) # pRoot.left, pRoot.right = right, left # return pRoot def Mirror(self, pRoot: TreeNode) -> TreeNode: """ method_2: 非递归 步骤: step1: 优先检查空树的情况 step2: 使用栈辅助遍历二叉树,根节点先进栈 step3: 遍历过程中每次弹出栈中一个元素,然后改节点左右节点分别入栈 step4: 同时交换入栈的两个子节点的值, 因为子节点已经入栈,再交换,不担心后序没有交换。 """ if not pRoot: return None tmp_stack = list() tmp_stack.append(pRoot) while tmp_stack: node = tmp_stack[-1] tmp_stack.pop() if node.left: tmp_stack.append(node.left) if node.right: tmp_stack.append(node.right) tmp = node.left node.left = node.right node.right = tmp return pRoot 好难过,又是一道