【算法刷题】翻转二叉树

本文为个人解题思路整理,水平有限,有问题欢迎交流


概览

一个简单的递归而已,入门级算法题,其实没啥记录的价值,写出来是因为看到个有趣的东西,莫名可爱

image-20200917164027639

难度:入门

核心知识点:递归


题目来源

力扣:https://leetcode-cn.com/problems/invert-binary-tree/


题目内容

翻转一颗二叉树


样例

数据源

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

输出

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

解题思路

  • 观察样例可以看出我们需要把所有节点的左右子节点互换位置,那么将所有节点的左右子节点互换即可
  • 因为二叉树所有节点的结构一致,那么可以从根节点开始互换左右子节点,并将子节点作为父节点做同样的操作

解题方案

  1. 将根节点作为当前父节点

  2. 开始处理父节点

    1. 检查父节点是否为空,是的话那么没有子节点,结束

    2. 分别将子节点作为根节点

    3. 开始处理父节点

      ......


完整代码

public class InvertTree {
    public static void main(String[] args) {
        // write your code here
        InvertTree invertTree = new InvertTree();
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }

    public InvertTree() {
        //模拟构建一棵树
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        TreeNode node9 = new TreeNode(9);
        node4.left = node2;
        node4.right = node7;
        node2.left = node1;
        node2.right = node3;
        node7.left = node6;
        node7.right = node9;
        //执行翻转
        invertTree(node4);
//        System.out.println(node4.toString());//打印无效,要自己重写toString方法,此处省略,仅用于断点
    }

    public TreeNode invertTree(TreeNode root) {
        search(root);
        return root;
    }

    public void search(TreeNode root) {
        if (root == null) {
            return;
        }
        TreeNode t = root.left;
        root.left = root.right;
        root.right = t;
        search(root.left);
        search(root.right);
    }
}

执行结果

莫得,自己打个断点看node4的内容吧,树打印出来太麻烦了

性能

image-20200917165631208

后记

我还特地去了解了一下Homebrew,觉得这样牛皮的一个人居然手写不出来这题,着实过于离谱


作者:Echo_Ye

WX:Echo_YeZ

Email :echo_yezi@qq.com

个人站点:在搭了在搭了。。。(右键 - 新建文件夹)

posted @ 2020-09-17 17:06  Echo_Ye  阅读(243)  评论(0编辑  收藏  举报