前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
思路:
前后序遍历都可以
中序不行,因为先左孩子交换孩子,再根交换孩子(做完后,右孩子已经变成了原来的左孩子),再右孩子交换孩子(此时其实是对原来的左孩子做交换)
这道题很容器想到递归,因为首先是根节点反转,之后根节点左边反转,根节点右边反转
那么这个反转其实就可以抽取出来!然后节点分别调用它们不就可以了!
但是要注意的点这种方式遍历的时候不能用中序遍历,因为你首先左交换,之后换到右边,右边再换实际换的还是左边节点的交换
是不是非常的amazing呢?zhuan
我们来画图理解一下: 二叉树原始的样子,那怎么把他们翻转呢?
第一步如下: 先交换子节点
第二步如下:
在交换父节点,这样就完成了二叉树的翻转
好的,思路我们滤清了,那代码怎么写呢?
还是先写一个二叉树的定义
Definition for a binary tree node. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } }
完成代码如下: 意思就是先交换根节点下左节点的值,然后在交换右节点的值,最后交换根节点两边的值,这样就完成了二叉树的翻转
class Solution { public TreeNode invertTree(TreeNode root) { if(root == null){ return null; } invertTree(root.left); invertTree(root.right); swapChildren(root); return root; } public void swapChildren(TreeNode root){ TreeNode tmp = root.left; root.left = root.right; root.right = tmp } }