前言:
五月集训,前面为学习内容,想要一起学习的可以看一看,最后的才是五月集训每天的作业。
一、知识点
dfs可以实现二叉树的前、中、后序遍历。
二、课堂习题
这里的题均出自《算法零基础100讲》
着急学习去看专栏吧。
三、作业
144. 二叉树的前序遍历
94. 二叉树的中序遍历
145. 二叉树的后序遍历
104. 二叉树的最大深度
解题思路:
全都用dfs实现遍历即可。
代码:
/**
* 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 {
List<Integer> ans = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
if(root == null) return ans;
dfs(root);
return ans;
}
public void dfs(TreeNode node){
ans.add(node.val);
if(node.left != null) dfs(node.left);
if(node.right != null) dfs(node.right);
}
}
/**
* 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 {
List<Integer> ans = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root == null) return ans;
dfs(root);
return ans;
}
public void dfs(TreeNode node){
if(node.left != null) dfs(node.left);
ans.add(node.val);
if(node.right != null) dfs(node.right);
}
}
/**
* 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 {
List<Integer> ans = new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root == null) return ans;
dfs(root);
return ans;
}
public void dfs(TreeNode node){
if(node.left != null) dfs(node.left);
if(node.right != null) dfs(node.right);
ans.add(node.val);
}
}
/**
* 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 {
int maxDeep = 0;
public int maxDepth(TreeNode root) {
if(root == null) return 0;
int deep = 0;
dfs(root,deep+1);
return maxDeep;
}
public void dfs(TreeNode node,int deep){
if(maxDeep < deep){
maxDeep = deep;
}
if(node.left != null) dfs(node.left,deep+1);
if(node.right != null) dfs(node.right,deep+1);
}
}
四、总结
对于算法的掌握还是不够熟练,需要进行反复训练!
另外,剩下的课堂训练题目留到下个月的集训啦(●ˇ∀ˇ●)