持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
前言
二叉树的题目还有很多,我打算把这些全做了。
今天的这道也是关于二叉树的题目,算得上是二叉树题目中比较简单的题目了,虽然这道题本身难度就是处于简单系列。
还是一起来看一下吧,顺便加深一下对二叉树的理解。
算法题:二叉树的前序遍历
本道题的题意,是要将一个二叉树中的值全部读取到一个list集合中。
这从题目本上来看其实很简单。
这里有一个非常重要的点需要注意一下,题目示例中并没有给出二叉树左右节点都有值的情况,并不是不会存在的,所以要把左右节点都考虑进去才行。
具体的一些实现思路,主要就是递归,从上几次的经验来看,递归是处理二叉树最有效的方式了。
通过递归方法,将左右子节点的值也一并放置到List集合中,最后就是我们要的预期结果了。
代码展示
运行代码如下,采用的就是上述方案,请各位查漏补缺。
/**
* 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> list = new ArrayList<Integer>();
digui(root, list);
return list;
}
public void digui(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
list.add(root.val);
digui(root.left, list);
digui(root.right, list);
}
}
执行结果如下
结果可以说是相当不错了,二叉树的递归,加上List集合的搭配可以解决很多类型的问题。
总结
这道题本身并不难,二叉树的题目也做了好几道了,自然也就是递归方法来处理此类问题。