zoukankan      html  css  js  c++  java
  • 【算法刷题】翻转二叉树

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


    概览

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

    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

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

  • 相关阅读:
    python并发编程
    中缀表达式转换为后缀表达式(python实现)
    使用docker部署filebeat和logstash
    数据结构和算法的一些思考
    RESTFUL如何指导WEB API设计?
    哈希表的原理及实现代码
    python实现有序字典
    django源码分析 请求流程
    python 通过元类控制类的创建
    前后端分离人力资源管理系统
  • 原文地址:https://www.cnblogs.com/silent-bug/p/13686205.html
Copyright © 2011-2022 走看看