LeetCode0226.反转二叉树[简单][Python][二叉树][递归]ProblemLeetCode反转二叉树。示例:输入:4/\27/\/\1369Output:4/\72/\/\9631Trivia:这个问题的灵感来自于MaxHowell的这条原创推文:谷歌:我们90%的工程师使用你编写的软件(Homebrew),但你不能在白板上反转二叉树,所以f*关闭。问题是反转二叉树。示例:输入:4/\27/\/\1369输出:4/\72/\/\9631注:本题灵感来自MaxHowell的原题:Google:We90It'stoo糟糕的是,有%的工程师使用您编写的软件(Homebrew),但您不能在面试期间在白板上写翻转二叉树。思路解决方案1.先序递归遍历二叉树。如果当前节点有子树,交换左右子树。Python3代码#定义二叉树节点。#classTreeNode:#def__init__(self,x):#self.val=x#self.left=None#self.right=Noneclass解决方案:definvertTree(self,root:TreeNode)->TreeNode:#方案一:递归ifnotroot:returnNone#叶子节点,如果不是root.leftandnotroot.right:returnroot#交换非叶子节点的左右子树root,直接返回自身.left,root.right=root.right,root.leftifroot.left:self.invertTree(root.left)ifroot.right:self.invertTree(root.right)returnrootsolutiontwo-stack模拟二叉树与堆栈。Python3代码#定义二叉树节点。#classTreeNode:#def__init__(self,x):#self.val=x#self.left=None#self.right=Noneclass解决方案:definvertTree(self,root:TreeNode)->TreeNode:#方案二:stackifnotroot:returnNone#叶子节点,如果不是root.left和notroot.right则直接返回自身:returnroot#Stack模拟二叉树stack=[root]whilestack:node=stack.pop()ifnode:node.left,node.right=node.right,node.leftstack.append(node.right)stack.append(node.left)返回根代码地址GitHub链接
