3.1 前言
看了很多别人总结的算法的笔记,他们都比较推荐在我们对算法无从下手的时候,去刷二叉树的题,因为二叉树类型的题能够培养我们的框架思维,为我们接下来刷动态规划类型打一个很好的基础。首先声明:该文章的侧重点是帮我们建立二叉树算法的类型体系,以便于我们熟能生巧,在面试中发挥的更好,对数据结构不做详细讲解。
二叉树的遍历:递归思想
//System.out.println(root.val);
void traverse(TreeNode root) {
// 前序遍历
//System.out.println(root.val);
traverse(root.left)
// 中序遍历
//System.out.println(root.val);
traverse(root.right)
// 后序遍历
//System.out.println(root.val);
}
3.2 验证二叉搜索树的合法性
boolean isBST(TreeNode root,TreeNode min,TreeNode max){
//base case
if(root == null){
return ture;
}
if(min != null && root.val <= min)return false;
if(max != null && root.val >= max)return false;
return isBST(root.left,min,root) && isBST(root.right,root,max);
}
3.3 带你刷 LeetCode 二叉树
下面的题都是我这周做的,然后写了比较详细的题解,东西基本都在题解里面了。
题目链接 | 我的题解 |
---|---|
【力扣】226.翻转二叉树 | 我的题解 |
【力扣】652. 寻找重复的子树 | 我的题解 |
【力扣】114. 二叉树展开为链表 | 我的题解 |
【力扣】654. 最大二叉树 | 我的题解 |
【力扣】105. 从前序与中序遍历序列构造二叉树 | 我的题解 |
【力扣】106. 从中序与后序遍历序列构造二叉树 | 我的题解 |
【力扣】230. 二叉搜索树中第K小的元素 | 我的题解 |
【力扣】538. 把二叉搜索树转换为累加树 | 我的题解 |
至此,二叉树就讲到这里,如果你把上面的题都做完,并且认真总结的话,相信你一定会有很大的收获。上面的题是二叉树的经典题型,如果都掌握的话,建议去深入学习BST的一些操作,比如删除操作,如何在删除之后依旧维持他的稳定?等等…这里就不再过多讨论了。有什么问题可以私信我或者提出来,大家共同进步!加油!
ps:由于临近期末,这周我就更新这一期,计网还有其他专业课该好好复习了,不能挂科。