给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = [1,2]
输出:[1,2]
题解
上面示例1我们可以把空节点补充上去。
首先要弄清楚什么是前序遍历,前序遍历的顺序为根->左->右
,上图根为1,先遍历根,然后对左子树进行前序遍历,左节点为null,左边遍历结束,开始遍历右节点,右节点根为2,对这颗右子树进行前序遍历。
题目给我们的节点定义如下:
// 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 {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>(); //定义一个结果集合
preorder(root, res);
return res;
}
public void preorder(TreeNode root, List<Integer> res){
if(root == null){ //根节点不存在直接不用遍历了
return;
}
res.add(root.val); //将根节点的值添加到集合中去
preorder(root.left, res); //将根节点的左节点进行一次前序遍历
preorder(root.right,res); //左子树遍历完毕,遍历右子树
}
}