听不少大佬建议过——力扣刷题要从树开始 !
因为可以建立起套路化的思路~ 另外就是锻炼好递归的思想
所以 我们从树开始~
另外 本专题采用 前面提到的 “兔系刷题法”
不求钻研多种解法 只求快速见题型快速刷题!
另外 力扣评论区里看见的——
树的题目写不出来,多背几个模版就行。
前中后序、广度深度遍历、路径和、深度,直径,这些全部背下来。
感觉很有道理!多背些多理解些套路嘛!
先来看到最最基础的 树的前中后序遍历
前面三道题 其实就是一道题 一个模板 解决这三题~
最后一题N叉树的前序遍历其实也就是变了个思路
本次刷题采用递归方法
144. 二叉树的前序遍历
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
根 - 左子树 - 右子树
不多解释了~
递归
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<Integer> ();
preorder(root, ans);
return ans;
}
public void preorder(TreeNode root, List<Integer> ans){
if (root == null){
return;
}
ans.add(root.val);
preorder(root.left, ans);
preorder(root.right, ans);
}
}
94.二叉树的中序遍历
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
递归
左子树 - 根 - 右子树
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<Integer>();
inorder(root, ans);
return ans;
}
public void inorder(TreeNode root, List<Integer> ans){
if (root == null){
return;
}
inorder(root.left, ans);
ans.add(root.val);
inorder(root.right, ans);
}
}
145. 二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历。
递归
左子树 - 右子树 - 根
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<Integer> ();
postorder(root, ans);
return ans;
}
public void postorder(TreeNode root, List<Integer> ans){
if (root == null){
return;
}
postorder(root.left, ans);
postorder(root.right, ans);
ans.add(root.val);
}
}
589.N叉树的前序遍历
给定一个 N 叉树,返回其节点值的 前序遍历 。
N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔。
递归法
需要掌握一个挨个遍历N叉树所有节点的方法
for (Node child:root.children)
即为 for each
法
class Solution {
List<Integer> res = new ArrayList<Integer>();
public List<Integer> preorder(Node root) {
if (root == null){
return res;
}
res.add(root.val);//节点值挨个入队列~
// 遍历N叉树的所有节点!每个节点的临时名字为child
for (Node child:root.children){
preorder(child);
}
return res;
}
}