一、今日刷题
1. 第七部分:二叉树 – 144.二叉树的前序遍历
答案代码:
package BinaryTree;
import javax.swing.tree.TreeNode;
import java.util.ArrayList;
import java.util.List;
/**
* @author: LYZ
* @date: 2022/2/17 10:04
* @description:
*/
public class PreorderTraversal {
public static void main(String[] args) {
PreorderTraversal preorder = new PreorderTraversal();
TreeNode tree = new TreeNode(1, new TreeNode(2), new TreeNode(3));
List<Integer> ans = preorder.preorderTraversal(tree);
System.out.println(ans);
}
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
preorder(root, list);
return list;
}
public void preorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
list.add(root.val);
preorder(root.left, list);
preorder(root.right, list);
}
public static 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;
}
}
}
2. 第七部分:二叉树 – 145.二叉树的后序遍历
答案代码:
package BinaryTree;
import java.util.ArrayList;
import java.util.List;
/**
* @author: LYZ
* @date: 2022/2/17 10:22
* @description:
*/
public class PostorderTraversal {
public static 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;
}
}
public static void main(String[] args) {
PostorderTraversal postorder = new PostorderTraversal();
TreeNode root = new TreeNode(1, new TreeNode(2), new TreeNode(3));
List<Integer> ans = postorder.postorderTraversal(root);
System.out.println(ans);
}
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
postorder(root, list);
return list;
}
public void postorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
postorder(root.left, list);
postorder(root.right, list);
list.add(root.val);
}
}
3. 第七部分:二叉树 – 94.二叉树的中序遍历
答案代码:
package BinaryTree;
import java.util.ArrayList;
import java.util.List;
/**
* @author: LYZ
* @date: 2022/2/17 10:33
* @description:
*/
public class InorderTraversal {
public static void main(String[] args) {
InorderTraversal inorder = new InorderTraversal();
Tree root = new Tree(1, new Tree(2), new Tree(3));
List<Integer> ans = new ArrayList<>();
ans = inorder.inorderTraversal(root);
System.out.println(ans);
}
public List<Integer> inorderTraversal(Tree root) {
List<Integer> list = new ArrayList<>();
inorder(root, list);
return list;
}
public void inorder(Tree root, List<Integer> list) {
if (root == null) {
return;
}
inorder(root.left, list);
list.add(root.val);
inorder(root.right, list);
}
}
二、总结
1.三种遍历方式其实就是在返回值为 void 的方法中将三个语句调换顺序。
前序:
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
preorder(root, list);
return list;
}
public void preorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
list.add(root.val);
preorder(root.left, list);
preorder(root.right, list);
}
中序:
public List<Integer> inorderTraversal(Tree root) {
List<Integer> list = new ArrayList<>();
inorder(root, list);
return list;
}
public void inorder(Tree root, List<Integer> list) {
if (root == null) {
return;
}
inorder(root.left, list);
list.add(root.val);
inorder(root.right, list);
}
后序:
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
postorder(root, list);
return list;
}
public void postorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
postorder(root.left, list);
postorder(root.right, list);
list.add(root.val);
}
在写中序时,想到可以将构造树的类TreeNode 单独写出来,遍历时需要创建树时再调用构造类,这样代码会更简洁,只不过在提交力扣时得按它内部的类名 TreeNode 来命名构造类。