「java遍历一颗树」树的层序遍历java
本篇文章给大家谈谈java遍历一颗树,以及树的层序遍历java对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java怎么对树形结构进行遍历
- 2、树的遍历的方法
- 3、java中的遍历是什么意思?
- 4、怎样中序遍历一棵树或森林~~~~注意是树,不是二叉树
- 5、如何在java构造函数中创建一棵树
- 6、用Java实现一个树形结构,并对其进行遍历
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());
}
}
}
树的遍历的方法
为了将一棵树中所有结点按某种次序列表,只须对树根调用相应过程。例如对图7中的树进行前序遍历、中序遍历和后序遍历将分别得到前序列表:A B E F I J
C D G H;中序列表:E B I F J A C G D H;后序列表:E I J F B C G H D A。
下面介绍一种方法可以产生上述3种遍历方式的结点列表。设想我们从树根出发,依逆时针方向沿树的外缘绕行(例如围绕图7中的树绕行的路线如图8所示)。绕行途中可能多次经过同一结点。如果我们按第一次经过的时间次序将各个结点列表,就可以得到前序列表;如果按最后一次经过的时间次序列表,也就是在即将离开某一结点走向其父亲时将该结点列出,就得到后序列表。为了产生中序列表,要将叶结点与内部结点加以区别。叶结点在第一次经过时列出,而内部结点在第二次经过时列出。
在上述3种不同次序的列表方式中,各树叶之间的相对次序是相同的,它们都按树叶之间从左到右的次序排列。3种列表方式的差别仅在于内部结点之间以及内部结点与树叶之间的次序有所不同。
一棵树进行前序列表或后序列表有助于查询结点间的祖先子孙关系。假设结点v在后序列表中的序号(整数)为postorder(v),我们称这个整数为结点v的后序编号。例如在图7中,结点E,I和J的后序编号分别为1,2和3。
结点的后序编号具有这样的特点:设结点v的真子孙个数为desc(v),那么在以v为根的子树中的所有结点的后序编号恰好落在postorder(v)- desc(v)与postorder(v)之间。因此为了检验结点x是否为结点y的子孙,我们只要判断它们的后序编号是否满足:
postorder(y)-desc(y)≤postorder(x)≤postorder(y)
前序编号也具有类似的性质。
java中的遍历是什么意思?
遍历就是把每个元素都访问一次比如一个二叉树,遍历二叉树意思就是把二叉树中的每个元素都访问一次java中的遍历是什么意思?
怎样中序遍历一棵树或森林~~~~注意是树,不是二叉树
6.7 树和森林的遍历
树的遍历可有三条搜索路径:
先根(次序)遍历:
若树不空,则先访问根结点,然后依次先根遍历各棵子树。
后根(次序)遍历:
若树不空,则先依次后根遍历各棵子树,然后访问根结点。
按层次遍历:
若树不空,则自上而下自左至右访问树中每个结点。
森林的遍历
先序遍历(对森林中的每一棵树进行先根遍历)
若森林不空,则
访问森林中第一棵树的根结点;
先序遍历森林中第一棵树的子树森林;
先序遍历森林中(除第一棵树之外)其余树构成的森林。
中序遍历(对森林中的每一棵树进行后根遍历)
若森林不空,则
中序遍历森林中第一棵树的子树森林;
访问森林中第一棵树的根结点;
中序遍历森林中(除第一棵树之外)其余树构成的森林。
如何在java构造函数中创建一棵树
import java.util.Stack;//导入栈包
public class newtree {
private newtree lchild;// 声明数据成员
private newtree rchild;
private char data;
private newtree root;
public newtree(newtree l, newtree r, char data) {// 有参构造函数进行成员赋值
lchild = l;
rchild = r;
this.data = data;
}
public newtree() {// 无参构造函数创建树
newtree f = new newtree(null, null, 'f');
newtree g = new newtree(null, null, 'g');
newtree d = new newtree(null, null, 'd');
newtree e = new newtree(null, null, 'e');
newtree b = new newtree(d, e, 'b');
newtree c = new newtree(f, g, 'c');
newtree a = new newtree(b, c, 'a');
this.root=a;
}
public void visit(newtree p) {/* 输出数据 */
System.out.print(p.data);// 访问结点
}
@SuppressWarnings("unchecked")
public void InOrder() {/* 输入数据 */
newtree p=this.root;//你建了一棵树要把根节点赋值进去啊
Stack s = new Stack();
while (p != null || !s.isEmpty()) /* 处理数据:进行中序遍历 */
{
if (p != null) {
s.push(p);
p = p.lchild;
} else {
p = (newtree) s.pop();
p.visit(p);//this指的是当前的类对象
p = p.rchild;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
newtree h = new newtree();// 声明变量,变量赋值
h.InOrder();
}
}
//根据你的代码改了一个
import java.util.Stack;//导入栈包
public class newtree {
public Tree createTree() {// 无参构造函数创建树
Tree f = new Tree(null, null, 'f');
Tree g = new Tree(null, null, 'g');
Tree d = new Tree(null, null, 'd');
Tree e = new Tree(null, null, 'e');
Tree b = new Tree(d, e, 'b');
Tree c = new Tree(f, g, 'c');
Tree a = new Tree(b, c, 'a');
return a;
}
public void InOrder(Tree p) {/* 输入数据 */
StackTree s = new StackTree();
while (p != null || !s.isEmpty()) { /* 处理数据:进行中序遍历 */
if (p != null) {
s.push(p);
p = p.lchild;
} else {
p = s.pop();
System.out.print(p.data);
p = p.rchild;
}
}
}
public void inOrder1(Tree p) {
if (p == null)
return;
inOrder1(p.lchild);
System.out.print(p.data);
inOrder1(p.rchild);
}
public static void main(String[] args) {
newtree h = new newtree();// 声明变量,变量赋值
h.InOrder(h.createTree());
System.out.println();
h.inOrder1(h.createTree());
}
}
class Tree {
Tree lchild;// 声明数据成员
Tree rchild;
char data;
Tree(Tree lchild, Tree rchild, char data) {
this.lchild = lchild;
this.rchild = rchild;
this.data = data;
}
}
用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遍历一颗树的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于树的层序遍历java、java遍历一颗树的信息别忘了在本站进行查找喔。
发布于:2022-11-24,除非注明,否则均为
原创文章,转载请注明出处。