1. 描述
翻转一棵二叉树。
2. 示例
输入:
输出:
3. 分析
观察输入与输出,以节点“4”作为观察目标,可以看到根节点“4”不变,它的左孩子“2”与右孩子“7”交换了位置,且左孩子“2”所在的左子树与右孩子“7”所在的右子树整体也交换了位置。同样的规律在其他节点也存在。
于是我们得出结论,
翻转二叉树操作包括:
(1)根节点保持不变;
(2)交换左子树与右子树。
(3)翻转左子树;
(4)翻转右子树。
4. 代码
/**
* Definition for a binary tree node.
* 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 root;
// 根非空的话,交换左右子树
TreeNode cache = root.left;
root.left = root.right;
root.right = cache;
// 翻转左子树
invertTree(root.left);
// 翻转右子树
invertTree(root.right);
return root;
}
}
5. 验证
6. 出处
- LeetCode 226. 翻转二叉树
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/invert-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。