来源:力扣(LeetCode)
链接:144.前序遍历、94.中序遍历、145.后序遍历
概念:
首先,我们结合图形了解一下他们的原理
前序遍历:即先序遍历(Pre-order),指按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先根后左再右。巧记:根左右。
中序遍历:中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。巧记:左根右。
后序遍历:后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。巧记:左右根。
三个题目了解套路~
——————————
这是个可爱的分割线……
——————————
先序遍历
题目
给定一个二叉树,返回它的 前序 遍历。
输入: [1,null,2,3]
输出: [1,2,3]
前序遍历?好的,我知道了,根左右!
每访问一个结点,先访问根就对了~
一、递归:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
helper(root, res);
return res;
}
private void helper(TreeNode root, List<Integer> res){
if(root == null) return ;
res.add(root.val);//每次访问,节点放进来
helper(root.left, res);//找左子树
helper(root.right, res);//找右子树
}
}
二、迭代:
看一下原理图:
注意:栈中的元素是先进后出
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List