力扣每日一题,226. 翻转二叉树

在这里插入图片描述

题目描述

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

备注:
这个问题是受到 Max Howell 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

思路

想反转这颗树,起码得会遍历这颗树
下面给出二叉树遍历模板。

模板

递归实现二叉树的前中后序遍历代码非常相似,只用记前序遍历就好。

package 二叉树_前序遍历_递归实现;
public class Solution {
    public static void main(String[] args) {
        /*
         *       5
         *      / \
         *     4   3
         *    / \
         *   1   2
         */
        TreeNode root = new TreeNode(5);
        root.left = new TreeNode(4);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(1);
        root.left.right = new TreeNode(2);
        new Solution().preOrder(root);
    }
    // 递归实现
    void preOrder(TreeNode root) {
        if (root != null) {
            System.out.print(root.val + " ");
            preOrder(root.left);
            preOrder(root.right);
        }
    }
}
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) {
        val = x;
    }
}

提交代码

翻转二叉树,遍历过程中交换左右子树就好了。

package 翻转二叉树;

import org.junit.Test;

public class Solution {
	@Test
	public void testInvertTree() throws Exception {
		TreeNode root = new TreeNode(4);
		root.left = new TreeNode(2);
		root.right = new TreeNode(7);
		root.left.left = new TreeNode(1);
		root.left.right = new TreeNode(3);
		root.right.left = new TreeNode(6);
		root.right.right = new TreeNode(9);
		invertTree(root);
		
		
	}
	public TreeNode invertTree(TreeNode root) {
		if(root!=null){
			System.out.println(root.val);
			TreeNode temp = root.left;
			root.left = root.right;
			root.right = temp; 
			invertTree(root.left);
			invertTree(root.right);
		}
		return root;
	}
	
	class TreeNode {
		int val;
		TreeNode left;
		TreeNode right;
		TreeNode(int x) {
			val = x;
		}
	}
}

分享本
算法竞赛入门经典
https://o8.cn/ztnkDg
密码:rdu3
(本地高速是下载器)

posted on 2020-09-16 08:45  107国道道长  阅读(88)  评论(0编辑  收藏  举报

导航