Appearance
0156-上下翻转二叉树
题目描述
https://leetcode.cn/problems/binary-tree-upside-down
给你一个二叉树的根节点 root ,请你将此二叉树上下翻转,并返回新的根节点。
你可以按下面的步骤翻转一棵二叉树:
- 原来的左子节点变成新的根节点
- 原来的根节点变成新的右子节点
- 原来的右子节点变成新的左子节点

上面的步骤逐层进行。题目数据保证每个右节点都有一个同级节点(即共享同一父节点的左节点)且不存在子节点。
示例 1: 
输入:root = [1,2,3,4,5]
输出:[4,5,2,null,null,3,1]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
- 树中节点数目在范围 [0, 10] 内
- 1 <= Node.val <= 10
- 树中的每个右节点都有一个同级节点(即共享同一父节点的左节点)
- 树中的每个右节点都没有子节点
思路
根据题目的定义,注意递归处理树的左节点。 注意翻转完成之后,需要把 root.left , root.right 置空,因为root节点移到右下角后,没有子节点了,防止循环处理。
csharp
public class Solution {
public TreeNode UpsideDownBinaryTree(TreeNode root) {
if(root == null || root.left == null){
return root;
}
TreeNode left = root.left;
TreeNode tempRoot = UpsideDownBinaryTree(root.left);
TreeNode right = root.right;
left.left = right;
left.right = root;
root.left = null;
root.right = null;
return tempRoot;
}
}
复习:20220616
csharp
public class Solution {
public TreeNode UpsideDownBinaryTree(TreeNode root) {
if(root == null || (root.left == null && root.right == null)){
return root;
}
TreeNode left = root.left;
TreeNode right = root.right;
TreeNode newRoot = UpsideDownBinaryTree(left);
left.left = right;
left.right = root;
root.left = null;
root.right = null;
return newRoot;
}
}
AlgoPress