二叉树数据定义:链表
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; } }
二叉树题型分为以下几类:
Leetcode 144 力扣
解法:前序遍历,递归遍历,中左右
public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); preorder(root, list); return list; } private void preorder(TreeNode root, List<Integer> list) { if (root == null){ return; } list.add(root.val); preorder(root.left,list); preorder(root.right,list); }
Leetcode 94 力扣
解法:中序遍历,递归遍历,左中右
public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); inorder(root, list); return list; } private void inorder(TreeNode root, List<Integer> list) { if (root == null){ return; } inorder(root.left,list); list.add(root.val); inorder(root.right,list); }
Leetcode 145 力扣
解法:后序遍历,递归遍历,左右中
public List<Integer> postorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); postorder(root, list); return list; } private void postorder(TreeNode root, List<Integer> list) { if (root == null){ return; } postorder(root.left,list); postorder(root.right,list); list.add(root.val); }