Day5

今天学习的是二叉树的先序遍历、中序遍历、后序遍历
二叉树的遍历再Java中其实是很简单的一件事情,因为Java都给你把方法封装好了
root.val表示取节点的数据

方法(root.left)//表示遍历左子树
方法(root.right)//表示遍历右子树

今天错的几个地方
1、
先写的这句话

int len = list1.size();
int tree[][] = new int [3][len];

再写的这句话

 //先序遍历
 pre(root);
 //中序遍历
 mid(root);
 //后序遍历
 last(root);

忘记了是在方法中加入的元素,如果不先使用方法,会导致列表长度为0,导致len的值也为0,数组初始化的时候列的长度也为0,导致后面向数组中加元素的时候数组越界的错误
2、

ArrayList <Integer> list1 = new ArrayList<>();
ArrayList <Integer> list2 = new ArrayList<>();
ArrayList <Integer> list3 = new ArrayList<>();

这一段代码我开始写的是

List <Integer> list1 = new ArrayList<>();
List <Integer> list2 = new ArrayList<>();
List <Integer> list3 = new ArrayList<>();

然后后面在方法中也是用的ArrayList来定义,这会出现这样的错误

incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>>

用List来定义list1、list2、list3时,再在方法中用ArrayList来定义
ArrayList是List的子类没错,但是ArrayList<Integer>并不是List<Integer>的子类,所以并不能直接用,他们是并列关系,所以不能用来实例化

ArrayList<Integer>并不继承于List<Integer>

3、在方法中这一段代码不能少,否则会报空指针错误

if(root == null){
  return list1;
}

在这里插入图片描述

import java.util.*;
import java.util.List;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 the root of binary tree
     * @return int整型二维数组
     */
     ArrayList <Integer> list1 = new ArrayList<>();
     ArrayList <Integer> list2 = new ArrayList<>();
     ArrayList <Integer> list3 = new ArrayList<>();
    public int[][] threeOrders (TreeNode root) {
        // write code here
        //先序遍历
        pre(root);
        //中序遍历
        mid(root);
        //后序遍历
        last(root);
        int len = list1.size();
        int tree[][] = new int [3][len];
        //如果该二叉树是空的,就返回一个空的数组
        if(root == null){
            return new int[][]{{}};
        }
        for(int i=0; i<list1.size(); i++){
            tree[0][i] = list1.get(i);
        }
        for(int i=0; i<list2.size(); i++){
            tree[1][i] = list2.get(i);
        }
        for(int i=0; i<list3.size(); i++){
            tree[2][i] = list3.get(i);
        }
        return tree;
    }
    private ArrayList<Integer> pre(TreeNode root){
        if(root == null){
            return list1;
        }
            list1.add(root.val);
            pre(root.left);
            pre(root.right);
            return list1;
        }
     private ArrayList<Integer> mid(TreeNode root){
         if(root == null){
            return list2;
        }
            mid(root.left);
            list2.add(root.val);
            mid(root.right);
         return list2;
        }
     private ArrayList<Integer> last(TreeNode root){
         if(root == null){
            return list3;
        }
            last(root.left);
            last(root.right);
            list3.add(root.val);
         return list3;
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值