Java同学的面试算法学习 4

51 阅读1分钟

二叉树的前序遍历

题目描述

image-20231225180457609

思路

使用递归来进行前序遍历,通过java集合来记录,然后集合再循环转给数组

步骤

  • step 1:准备数组用来记录遍历到的节点值,Java可以用List先记录
  • step 2:从根节点开始进入递归,遇到空节点就返回,否则将该节点值加入数组。
  • step 3:依次进入左右子树进行递归。

代码

import java.util.*;
public class Solution {
    public void preorder(List<Integer> list, TreeNode root){
        //遇到空节点则返回
        if(root == null) 
            return;
        //先遍历根节点
        list.add(root.val); 
        //再去左子树
        preorder(list, root.left); 
        //最后去右子树
        preorder(list, root.right); 
    }
    
    public int[] preorderTraversal (TreeNode root) {
        //添加遍历结果的数组
        List<Integer> list = new ArrayList(); 
        //递归前序遍历
        preorder(list, root); 
        //返回的结果
        int[] res = new int[list.size()]; 
        for(int i = 0; i < list.size(); i++)
            res[i] = list.get(i);
        return res;
    }
}

总结

  1. 如果方法的返回值是数组,由于一开是不知道数组的大小,所以先使用集合来进行存储记录,然后再循环遍历交给数组
  2. 在java中集合作为形参一直传下去,集合内的内容会变化,不会清空重新开始