请完成一个函数,输入一个二叉树,该函数输出它的镜像。
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
递归法:根据二叉树镜像的定义,考虑递归遍历二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。终止条件:节点 root 为空时(即越过叶节点),则返回 null
class Solution(object): def mirrorTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ if not root : return tmp = root.left root.left = self.mirrorTree(root.right) root.right = self.mirrorTree(tmp) return root
栈的方法:利用栈(或队列)遍历树的所有节点 nodenode ,并交换每个 nodenode 的左 / 右子节点。
算法流程:
特例处理: 当 root 为空时,直接返回 null ;
初始化: 栈(或队列),本文用栈,并加入根节点 root 。
循环交换: 当栈 stack为空时跳出;
出栈: 记为 node ;
添加子节点: 将 node左和右子节点入栈;
交换: 交换 node的左 / 右子节点。
返回值: 返回根节点 root。
class Solution(object): def mirrorTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ if not root: return stack = [root] while stack: node = stack.pop() if node.left:stack.append(node.left) if node.right:stack.append(node.right) node.left,node.right = node.right,node.left return root
原文:https://www.cnblogs.com/minidu/p/13572584.html