示例:
输入:
4
2 7
1 3 6 9
输出:
4
7 2
9 6 3 1
观察原二叉树后可以发现左小右大,而反转后左大右小。
因此翻转的规律是从根节点开始将每一个节点都左右交换位置。
那么怎么做呢?
首先二叉树的方法最先想到的一般是递归。
递归的思路:
①寻找设置出口,没有出口,递归会出现死循环。这道题的出口明显是NULL的情况,并直接返回NULL。
②左右子节点的交换,通过一个中间变量,交换左右子节点。
③继续执行,也就是循环。
④返回结果。
由于这种做法是沿着树的深度遍历树的节点,尽可能深的搜索树的分支,又被称作是深度优先算法,DFS(Depth First Search)
综上我们给出代码:
//二叉树节点的定义
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 a = root.right;
root.right = root.left;
root.left = a;
//将交换了位置的左节点递归
invertTree(root.left);
//将交换了位置的右节点递归
invertTree(root.right);
//返回结果
return root;
}
}
题目来自LeetCode