156. 上下翻转二叉树
给你一个二叉树的根节点 root ,请你将此二叉树上下翻转,并返回新的根节点。
你可以按下面的步骤翻转一棵二叉树:
- 原来的左子节点变成新的根节点
- 原来的根节点变成新的右子节点
- 原来的右子节点变成新的左子节点
上面的步骤逐层进行。题目数据保证每个右节点都有一个同级节点(即共享同一父节点的左节点)且不存在子节点。
示例 1:
输入:root = [1,2,3,4,5]
输出:[4,5,2,null,null,3,1]
思路
就是模拟,画图过流程就可以了
复杂度
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1) 只用额外开辟三个变量
代码
class Solution {
public TreeNode upsideDownBinaryTree(TreeNode root) {
TreeNode p = null, q = null, r = null;
while(root != null){
r = root.left;
root.left = q;
q = root.right;
root.right = p;
p = root;
root = r;
}
return p;
}
}