翻转一棵二叉树。
    示例:

    输入:

    1. 4<br /> / \<br /> 2 7<br /> / \ / \<br />1 3 6 9<br />输出:
    2. 4<br /> / \<br /> 7 2<br /> / \ / \<br />9 6 3 1

    思路:把树和子树辨别出来,只要拥有叶,就可以当作一个子树,使用递归实现,将所有树的左叶和右叶取出互换引用地址,一直递归

    1. public TreeNode invertTree(TreeNode root) {
    2. if (root == null) {
    3. return null;
    4. }
    5. TreeNode left = invertTree(root.left);
    6. TreeNode right = invertTree(root.right);
    7. root.left=right;
    8. root.right=left;
    9. return root;
    10. }

    全代码:

    1. class TreeNode {
    2. int val;
    3. TreeNode left;
    4. TreeNode right;
    5. TreeNode(int val) { this.val = val; }
    6. TreeNode(int val, TreeNode left, TreeNode right) {
    7. this.val = val;
    8. this.left = left;
    9. this.right = right;
    10. }
    11. }
    12. class Solution {
    13. public static void main(String[] args) {
    14. //构建一个树
    15. TreeNode treeNode1 = new TreeNode(9);
    16. TreeNode treeNode2 = new TreeNode(6);
    17. TreeNode treeNode3 = new TreeNode(7,treeNode2,treeNode1);
    18. TreeNode treeNode4 = new TreeNode(1);
    19. TreeNode treeNode5 = new TreeNode(3);
    20. TreeNode treeNode6 = new TreeNode(2,treeNode4,treeNode5);
    21. TreeNode treeNode = new TreeNode(4,treeNode6,treeNode3);
    22. Solution solution = new Solution();
    23. solution.invertTree(treeNode);
    24. }
    25. public TreeNode invertTree(TreeNode root) {
    26. //树为空
    27. if (root == null) {
    28. return null;
    29. }
    30. //左叶递归
    31. TreeNode left = invertTree(root.left);
    32. //右叶递归
    33. TreeNode right = invertTree(root.right);
    34. //树左叶和右叶互换
    35. root.left=right;
    36. //树左叶和右叶互换
    37. root.right=left;
    38. //返回树
    39. return root;
    40. }
    41. }