题目
解题思路
这道题比较简单,大家可以自己先想想
。。。
。。。
🐟
。。。
🐟
。。。
反转二叉树的目的就是交换每个结点的左右结点
递归解题
子问题就出来,交换两个结点即可。对每一个递归到的元素都执行这个操作。返回值和终止条件就是遍历完所有元素返回根结点。
迭代解题
如果使用层序遍历,也只要在遍历下面的一层时,交换左右子树即可。
比如,上面的树为例,第一层是4,第二层是7,2。遍历4时,我们交换7和2,然后放入队列中,遍历7和2时,同样如此。
递归代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
//终止条件为空时
return null;
}
//子问题:交换左右子树
TreeNode left = root.left;
root.left = root.right;
root.right = left;
//递归上面的子问题
invertTree(root.left);
invertTree(root.right);
//返回结果
return root;
}
}
迭代代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
//使用队列
LinkedList<TreeNode> list = new LinkedList<>();
list.add(root);
while(!list.isEmpty()){
TreeNode tree = list.poll();
if(tree != null){
//交换左右两个结点
TreeNode left = tree.left;
tree.left = tree.right;
tree.right = left;
//BFS
if(tree.left != null){
list.add(tree.left);
}
if(tree.right != null){
list.add(tree.right);
}
}
}
return root;
}
}
- END -