原题: https://leetcode-cn.com/problems/invert-binary-tree/
一、题目要求
翻转一棵二叉树。
示例:
输入:
4 / \ 2 7 / \ / \ 1 3 6 9
输出:
4 / \ 7 2 / \ / \ 9 6 3 1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
二、解题
package com.leetcode.test.tree;
/**
* 翻转一棵二叉树。
*/
public class Solution5 {
public static void main(String[] args) {
TreeNode a1 = new TreeNode(4);
TreeNode a2 = new TreeNode(2);
TreeNode a3 = new TreeNode(7);
TreeNode a4 = new TreeNode(1);
TreeNode a5 = new TreeNode(3);
TreeNode a6 = new TreeNode(6);
TreeNode a7 = new TreeNode(9);
a1.left = a2;
a1.right = a3;
a2.left = a4;
a2.right = a5;
a3.left = a6;
a3.right = a7;
invertTree(a1);
}
public static TreeNode invertTree(TreeNode root) {
if (root == null || (root.left == null && root.right ==null)){ //空二叉树或者只有一个节点
return root;
}
//先反转当前节点的左节点和右节点
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
//再递归调用左节点和右节点
invertTree(root.left);
invertTree(root.right);
return root;
}
}