刷题专栏(十):二叉树的前序遍历

74 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

前言

二叉树的题目还有很多,我打算把这些全做了。

今天的这道也是关于二叉树的题目,算得上是二叉树题目中比较简单的题目了,虽然这道题本身难度就是处于简单系列。

还是一起来看一下吧,顺便加深一下对二叉树的理解。

image.png

算法题:二叉树的前序遍历

本道题的题意,是要将一个二叉树中的值全部读取到一个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集合的搭配可以解决很多类型的问题。

image.png

总结

这道题本身并不难,二叉树的题目也做了好几道了,自然也就是递归方法来处理此类问题。