java树先序遍历(java树的层序遍历)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
本篇文章给大家谈谈java树先序遍历,以及java树的层序遍历对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、java Map 怎么遍历
- 2、用Java实现一个树形结构,并对其进行遍历
- 3、利用JAVA 先序建立二叉树 #表示空树。例如输入ABC##DE#G##F### 先序遍历输出ABCDEGF 我写的程序不能输出
- 4、Java如何理解preOrder()的实现
- 5、java 二叉树前序遍历
java Map 怎么遍历
java Map 遍历一般有四种方式
方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
方式二: 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
方式三:使用Iterator遍历
使用泛型:
不使用泛型:
你也可以在keySet和values上应用同样的方法。
方法四: 通过键找值遍历(效率低)
作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。
因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。
总结:
如果仅需要键(keys)或值(values)使用方法二。
如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。
否则使用方法一(键值都要)。
扩展资料:
类似的遍历算法:
二叉树的遍历算法
1、先(根)序遍历的递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴ 访问根结点;
⑵ 遍历左子树;
⑶ 遍历右子树。
2、中(根)序遍历的递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵访问根结点;
⑶遍历右子树。
3、后(根)序遍历得递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵遍历右子树;
⑶访问根结点。
参考资料:百度百科——Java

用Java实现一个树形结构,并对其进行遍历
import java.util.Iterator;
import java.util.Random;
import java.util.TreeSet;
public class Demo{
public static void main(String[] args) throws Exception {
TreeSetInteger ts = new TreeSetInteger();
for(int i = 0; i 10; i++){
ts.add(new Random().nextInt(999));
}
for(IteratorInteger it = ts.iterator(); it.hasNext();){
System.out.println(it.next());
}
}
}
//上面是利用TreeSet进行简单的二叉树实现,另有遍历,当然遍历是自然顺序。
//如有需要请自行修改吧。
利用JAVA 先序建立二叉树 #表示空树。例如输入ABC##DE#G##F### 先序遍历输出ABCDEGF 我写的程序不能输出
你的程序有诸多问题,你的程序运行时候应该也会报错的吧?
这个写法不是很通用,不过我还是按照你的源码修改成了你想要的结果。
结构上基本一致,可实现基本已经面目全非了。
我用字符串代替了手工输入,你要是喜欢手工输入,你可以把我那个注释掉,用你自己的……
以下是修改后可用的代码:
import java.util.*;
class Node {
Node left;
Node Right;
char data;// 节点数据
void print() {
System.out.println(data + "");
}
public Node() {
this.left = null;
this.Right = null;
}
public Node(char data) {
this.left = null;
this.Right = null;
this.data = data;
}
}
class BTree {
static Node root = new Node();// 为根节点分配空间
static char ch[];// 输入的字符串
static int i = 0;
static Node CreateTree()// 先序建立二叉树
{
Node node = null;
if (ch[i] == '#') {
node = null;
i++;
}else {
node = new Node();
node.data = ch[i];
i++;
node.left = CreateTree();
node.Right = CreateTree();
}
return node;
}
static public void preorder(Node node)// 先序遍历二叉树
{
if (node != null) {
node.print();
preorder(node.left);
preorder(node.Right);
} else {
System.out.println("Tree node is empty");
}
}
}
public class Tree {
public static void main(String args[]) {
Scanner reader = new Scanner(System.in);
BTree.ch = new char[16];
BTree.ch[0] = 'a';
// 读取输入字符数组,以*结尾
BTree.ch = "ABC##DE#G##F###".toCharArray();
//for (int i = 0; (BTree.ch[i] = reader.next().charAt(0)) != '*'; i++){}
BTree.root = BTree.CreateTree();
BTree.preorder(BTree.root);
}
}
Java如何理解preOrder()的实现
这个不是很难理解哈,就是使用递归来遍历树,LZ请看:
首先,这个preOrder这个方法是用来遍历树的,貌似说了个废话,它需要一个
BinaryNodeE p的参数,这个参数就是树上的一个节点。
首先,假如当前p是A,那么判断p是否为null,也就是是否有这个节点,如果有,那么打印p.data,应该是p的信息。
然后再次调用这个preOrder遍历树的方法preOrder(p.left);preOrder(p.right),但这此传入的节点已经不是A了,而是p.left和p.right,也就是B和C,然后依然跟上面一样,先判断是否有该节点,如果有就打印节点信息,然后再次调用该方法传入自己的左右孩子节点,一次递归循环,自己的左右孩子为null的时候,当然不会走if语句里面的内容,递归也就自然结束了
希望可以帮到LZ
java 二叉树前序遍历
//类Node定义二叉树结点的数据结构;
//一个结点应包含结点值,左子结点的引用和右子结点的引用
class Node{
public Node left; //左子结点
public Node right; //右子结点
public int value; //结点值
public Node(int val){
value = val;
}
}
public class Traversal
{
//read()方法将按照前序遍历的方式遍历输出二叉树的结点值
//此处采用递归算法会比较简单,也容易理解,当然也可以用
//循环的方法遍历,但会比较复杂,也比较难懂。二叉树遍历
//用递归算法最为简单,因为每个结点的遍历方式都是,根,
//左,右,递归的调用可以让每个结点以这种方式遍历
public static void read(Node node){
if(node != null){
System.out.println(node.value);//输出当前结点的值
if(node.left != null)
read(node.left); //递归调用 先读左结点
if(node.right != null)
read(node.right); //递归调用 后读右结点
}
}
public static void main(String[] args){
//初始化5个结点,分别初始值为1,2,3,4,5
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
Node n5 = new Node(5);
//构建二叉树,以n1为根结点
n1.left = n2;
n1.right = n5;
n2.left = n3;
n2.right = n4;
read(n1);
}
}
注释和代码都是我自己写的,如果楼主觉得有的注释多余可以自己删除一些!代码我都编译通过,并且运行结果如你提的要求一样!你只要把代码复制编译就可以了,注意要以文件名Traversal.java来保存,否则编译不通过,因为main函数所在的类是public类型的!
java树先序遍历的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java树的层序遍历、java树先序遍历的信息别忘了在本站进行查找喔。
