目录
一、题目
二、解题思路
1、二叉树翻转
2、具体步骤(迭代法)
三、代码实现
一、题目
1、leetcode链接:力扣
2、题目内容:
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
二、解题思路
1、二叉树翻转
(1)就是将根节点和所有子节点的左右子树进行交换;
(2)根节点:树的最顶端的节点,每颗树只有一个根节点;
(3)子节点:除了根节点,连接有节点的节点。
如下图:
2、具体步骤(迭代法)
(1)我们需要借助队列来实现,队列的特点是先进先出;
(2)判断树是否为空,不为空,让根节点进入队列;
(3)判断队列是否为空,为空则结束,不为空:
①记录当前队列长度,根据该长度进行遍历;
②队列元素出队;
③交换出队元素的左右子树;
④判断左节点是否为空,不为空,入队;
⑤判断右节点是否为空,不为空,入队;
(4)第二层操作,重复以上步骤
(5)第三层操作,重复以上步骤
![]()
(6)队列为空,二叉树翻转完成
![]()
三、代码实现
(1)首先要判断树是否为空,为空则不进行操作;
(2)每层操作之前,要用一个定值记录当前树长度,因为开始出队入队操作时,队列的长度是不断变化的。
public class t06 {public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}public TreeNode invertTree(TreeNode root) {if (root==null){return root;}Queue<TreeNode> queue=new LinkedList<>();queue.add(root);while (!queue.isEmpty()){//记录当前队列长度int len=queue.size();for (int i = 0; i < len; i++) {TreeNode node=queue.poll();TreeNode temp=node.left;node.left=node.right;node.right=temp;if (node.left!=null){queue.add(node.left);}if (node.right!=null){queue.add(node.right);}}}return root;}
}