题目:上下翻转二叉树
难度:中等
```java
class Solution {
// 处理之后的根节点
TreeNode head;
public TreeNode upsideDownBinaryTree(TreeNode root) {
if (root == null) {
return null;
}
dfs(root);
return head;
}
public TreeNode dfs(TreeNode node) {
if (node == null) {
return null;
}
if (node.left == null && node.right == null) {
if (head == null) {
// 最左边的节点即为实际的根节点
head = node;
}
return node;
}
TreeNode left = dfs(node.left);
TreeNode right = dfs(node.right);
if (left != null) {
// 左孩子的左子树为当前的右节点
left.left = right;
// 左孩子的右子树为当前父节点
left.right = node;
}
// 清空的当前父节点的左右子树
node.right = null;
node.left = null;
return node;
}
}
解题思路如上:
主要用到的思想就是dfs和递归 树的题目基本都是这样 关键是找到切入点,如这个题目就是要找到哪个节点是根节点,然后怎么找出左子树和右子树。