题目:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2
输入:root = [2,1,3]
输出:[2,3,1]
思路:
发现想要翻转它,其实就把每一个节点的左右孩子交换一下就可以了。
关键在于遍历顺序,前中后序应该选哪一种遍历顺序?前后序都可以,就唯独中序会不太方便,会需要翻转两次。
遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。
注意只要把每一个节点的左右孩子翻转一下,就可以达到整体翻转的效果。
代码:
class Solution {
//这里用递归(先序遍历) 1、确定递归函数的参数和返回值
public TreeNode invertTree(TreeNode root) {
//2、确定终止条件 当前节点为空的时候,就返回
if(root==null){
return null;
}
//3、确定单层递归的逻辑
//先前序遍历,所以先进行交换左右孩子节点,然后反转左子树,反转右子树。
invertTree(root.left);
invertTree(root.right);
swap(root);
return root;
}
public void swap(TreeNode root){
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
}
后序遍历也是差不多的,就中间递归逻辑需要换一下。
中序遍历就会麻烦很多,有能力的同学可以尝试一下,教一下!