bm26 bm27 1

在这里插入图片描述在这里插入图片描述在这里插入图片描述描述 给定一个二叉树,返回该二叉树层序遍历的结果(从左到右,一层一层地遍历)
例如:给定的二叉树是{3,9,20,#,#,15,7},

在这里插入图片描述在这里插入图片描述ArrayDeque
ArrayDeque是java中对双端队列的线性实现
在这里插入图片描述在这里插入图片描述在这里插入代码片

import java.util.*;

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

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        // write code here
    ArrayList<ArrayList<Integer>> res=new ArrayList();
    if(root==null){return res;}
    Queue<TreeNode> q=new ArrayDeque<TreeNode>();
    q.add(root);
    while(!q.isEmpty()){
      int n=q.size();
      //补充定义一维数组
      ArrayList<Integer> row=new  ArrayList();
      for(int i=0;i<n;i++){
TreeNode cur=q.poll();
row.add(cur.val);
if(cur.left!=null){
q.add(cur.left);
}
if(cur.right!=null){
    q.add(cur.right);
}

      }res.add(row);


    }


    return res;
    }
}

head first java 读书笔记
友好的语法、可移植性、面向对象、内存管理
java:友好的语法
友好的语法
java语法友好
为什么说java语法友好
为什么说java语法友好

Java很容易学习,因为它消除了无用和复杂的特性,如运算符重载、显式指针等。此外,Java有一个类似于C++的语法,而且相对容易,特别是对于有C。它的创建是为了产生一种易于学习、使用、编译和调试的语言,因此Java比其他编程语言简单得多。

面向对象

创建类的对象就是创建类的示例。Java是面向对象的,也就是说,它创建每个类的实例,这些实例是类的副本。创建对象的优点是有几个相同代码的例子,并且在不修改主代码的情况下对对象进行修改。

内存管理
Java内存管理

richest_qi
JDK是支持Java程序开发的最小环境。Java虚拟机,Java类库和Java编程语言,统称为JDK。
JRE是支持Java程序运行的标准环境。Java虚拟机,Java类库API中的Java SE API子集,统称为JRE。
我们知道,Java是跨平台语言,“一次编写,到处运行”。
————————————————
版权声明:本文为CSDN博主「richest_qi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qzw752890913/article/details/120722404
在这里插入图片描述运行时数据区域

Java程序运行时的内存管理由Java虚拟机负责。 Java虚拟机所管理的内存主要包括以下几个运行时数据区域

栈(虚拟机栈)
Java虚拟机执行java方法时,使用的是虚拟机栈。
每个方法执行时,Java虚拟机都会同步创建一个栈帧。
栈帧中存储着局部变量表、操作数栈、动态连接、方法出口等信息。
其中,局部变量表中存放着各种Java基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用。
————————————————
版权声明:本文为CSDN博主「richest_qi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qzw752890913/article/details/120722404

堆 堆中存放着对象实例。用new创建一个对象,这个对象存储在堆里。 方法区
方法区中存放着已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
运行时常量池是方法区的一部分,存放着编译期生成的各种字面量与符号引用。
直接内存

直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。
直接内存是在Java堆外的,直接向系统申请的内存空间。

总结:内存管理由java虚拟机负责,Java虚拟机执行Java方法时,执行的是虚拟机栈。new的对象存在堆里。

最棒的跨平台移植性

即源代码。java文件已经被编译并转换成字节码,字节码可以在任何有Java虚拟机的机器上运行,Java虚拟机将字节码转换成计算机硬件可运行。
其他大多数编程语言如COBOL、C++、Smalltalk或Visual Basic将大部分代码编译成二进制文件。二进制文件依赖于平台,也就是说,为基于Intel的Windows机器设计的程序不能在基于Linux的机器或MAC上运行。

总结:Java可移植性:基于Java虚拟机,Java编成字节码,只要有虚拟机,就可以运行

write-once/run-anywhere
添加链接描述

编写一次,到处运行,直观的描述了Java具有强的跨平台能力,Java的跨平台特性与Java虚拟机的存在密不可分,在不同的平台都有相应的JDK,安装好JDK就能给Java提供相应的运行环境,Write once, run anywhere体现在不同的平台都可提供Java运行的环境。
————————————————
版权声明:本文为CSDN博主「Aminokk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_37537818/article/details/105392501

源代码->编译器->(打代码)、->输出

编译器会产出字节码,任何支持Java的装置都会把他转成可执行的内容

->虚拟机

通过软件实现,可以读取与执行字节码

我要做的事

源代码->编译器

执行javac程序编译.java文件,如果没错,会产生.class文件,这个文件由字节码组成

->输出

编译成代码.class

->java虚拟机
启动JVM(java虚拟机)运行.class文件,将字节码转换为平台理解的方式来运行

Java发展

Java1.02 Java1.1 Java2 Java5.0

int size = 27;//定义size=27
String name =Fido;//定义name string类型 =Fido
Dog myDog = new Dog(name, size);//Dog类实例化一个对象 myDog,有两个属性:name,size
x = size - 5;//定义x=size-5 :22
if (x < 15) myDog.bark(8);//如果 x<15 mydog 调用方法bark 传参8
while (x > 3) {//当 x>3的时候
myDog.play();//mydog 使用play 方法
}
int[] numList = {2,4,6,8}; //定义数组numList:2468
System.out.print(Hello);//打印 :Hello
System.out.print(Dog:+ name);//打印:Dog类的姓名
String num =8;//定义num string类型 =8
int z = Integer.parseInt(num);//定义z等于
try {
readTheFile(“myFile.txt”);
}//这个应该是读 .txt
catch(FileNotFoundException ex) {
System.out.print(File not found.);//如果失败了 打印 file not found
}
```java

```java
int size = 27;//声明一个int 类型,名称为size的对象并赋初始值27 
String name =Fido;//声明名称为 的字符串
Dog myDog = new Dog(name, size);//以name和size 声明一个名称为为myDog 的Dog变量
x = size - 5;
if (x < 15) myDog.bark(8);
while (x > 3) {
myDog.play();
}
int[] numList = {2,4,6,8};//声明有四个元素的整型数组
System.out.print(Hello);
System.out.print(Dog:+ name);//把dog输出到屏幕上,并输出它的名字
String num =8;
int z = Integer.parseInt(num);//将字符串8 转换为整型数字8
try {
readTheFile(“myFile.txt”);
}
catch(FileNotFoundException ex) {
System.out.print(File not found.);
}

给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
temp.offer
出队
队列出队
队列入队
offer入队ok
队列定义new LinkedList
添加链接描述
java中LinkedList 集合类实现栈和队列

java集合二之LinkedList

LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。

if(flag)
c

如果 flag = 1,那么 if(flag){函数体} 里面的函数体会执行,如果flag = 0 那么大括号里面的函数体就不会执行了

if(flag) java
添加链接描述

你设置的flag=false,在判断语句中一经判断不是真,就直接执行if(!flag){…code…},因为“如果为假”满足已设置的Boolean flag=false;的要求。

flag=false
if flag

添加链接描述

语句,只有在if()中的boolean为true时,才能执行if()语句下面的{},
如果为false时,执行else下面{};

这样能理解
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述ArrayList row
在这里插入图片描述在这里插入图片描述在这里插入代码片

import java.util.ArrayList;

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

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
 TreeNode head=pRoot;
 ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
 if(head==null){return res;}
Queue<TreeNode> temp=new LinkedList<TreeNode();
temp.offer(head);
TreeNode p;
boolean flag=true;
while(!temp.isEmpty()){
    int n=temp.size();
    ArrayList<Integer> row=new ArrayList<Integer>();
    flag=!flag;
    for(int i=0;i<n;i++){
        p=temp.poll();
        row.add(p.val);
        if(p.left!=null)
        {temp.offer(p.left);

        }
        if(p.right!=null){
            temp.offer(p.right);
        }
    }if(flag){
        Collections.reverse(row);
    res.add(row);
    }
    
}
 return res;

    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值