java二叉树创建(java二叉树的建立与遍历)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

今天给各位分享java二叉树创建的知识,其中也会对java二叉树的建立与遍历进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

java构建二叉树算法

//******************************************************************************************************//

//*****本程序包括简单的二叉树类的实现和前序,中序,后序,层次遍历二叉树算法,*******//

//******以及确定二叉树的高度,制定对象在树中的所处层次以及将树中的左右***********//

//******孩子节点对换位置,返回叶子节点个数删除叶子节点,并输出所删除的叶子节点**//

//*******************************CopyRight By phoenix*******************************************//

//************************************Jan 12,2008*************************************************//

//****************************************************************************************************//

public class BinTree {

public final static int MAX=40;

private Object data; //数据元数

private BinTree left,right; //指向左,右孩子结点的链

BinTree []elements = new BinTree[MAX];//层次遍历时保存各个节点

int front;//层次遍历时队首

int rear;//层次遍历时队尾

public BinTree()

{

}

public BinTree(Object data)

{ //构造有值结点

this.data = data;

left = right = null;

}

public BinTree(Object data,BinTree left,BinTree right)

{ //构造有值结点

this.data = data;

this.left = left;

this.right = right;

}

public String toString()

{

return data.toString();

}//前序遍历二叉树

public static void preOrder(BinTree parent){

if(parent == null)

return;

System.out.print(parent.data+" ");

preOrder(parent.left);

preOrder(parent.right);

}//中序遍历二叉树

public void inOrder(BinTree parent){

if(parent == null)

return;

inOrder(parent.left);

System.out.print(parent.data+" ");

inOrder(parent.right);

}//后序遍历二叉树

public void postOrder(BinTree parent){

if(parent == null)

return;

postOrder(parent.left);

postOrder(parent.right);

System.out.print(parent.data+" ");

}// 层次遍历二叉树

public void LayerOrder(BinTree parent)

{

elements[0]=parent;

front=0;rear=1;

while(frontrear)

{

try

{

if(elements[front].data!=null)

{

System.out.print(elements[front].data + " ");

if(elements[front].left!=null)

elements[rear++]=elements[front].left;

if(elements[front].right!=null)

elements[rear++]=elements[front].right;

front++;

}

}catch(Exception e){break;}

}

}//返回树的叶节点个数

public int leaves()

{

if(this == null)

return 0;

if(left == nullright == null)

return 1;

return (left == null ? 0 : left.leaves())+(right == null ? 0 : right.leaves());

}//结果返回树的高度

public int height()

{

int heightOfTree;

if(this == null)

return -1;

int leftHeight = (left == null ? 0 : left.height());

int rightHeight = (right == null ? 0 : right.height());

heightOfTree = leftHeightrightHeight?rightHeight:leftHeight;

return 1 + heightOfTree;

}

//如果对象不在树中,结果返回-1;否则结果返回该对象在树中所处的层次,规定根节点为第一层

public int level(Object object)

{

int levelInTree;

if(this == null)

return -1;

if(object == data)

return 1;//规定根节点为第一层

int leftLevel = (left == null?-1:left.level(object));

int rightLevel = (right == null?-1:right.level(object));

if(leftLevel0rightLevel0)

return -1;

levelInTree = leftLevelrightLevel?rightLevel:leftLevel;

return 1+levelInTree;

}

//将树中的每个节点的孩子对换位置

public void reflect()

{

if(this == null)

return;

if(left != null)

left.reflect();

if(right != null)

right.reflect();

BinTree temp = left;

left = right;

right = temp;

}// 将树中的所有节点移走,并输出移走的节点

public void defoliate()

{

String innerNode = "";

if(this == null)

return;

//若本节点是叶节点,则将其移走

if(left==nullright == null)

{

System.out.print(this + " ");

data = null;

return;

}

//移走左子树若其存在

if(left!=null){

left.defoliate();

left = null;

}

//移走本节点,放在中间表示中跟移走...

innerNode += this + " ";

data = null;

//移走右子树若其存在

if(right!=null){

right.defoliate();

right = null;

}

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

BinTree e = new BinTree("E");

BinTree g = new BinTree("G");

BinTree h = new BinTree("H");

BinTree i = new BinTree("I");

BinTree d = new BinTree("D",null,g);

BinTree f = new BinTree("F",h,i);

BinTree b = new BinTree("B",d,e);

BinTree c = new BinTree("C",f,null);

BinTree tree = new BinTree("A",b,c);

System.out.println("前序遍历二叉树结果: ");

tree.preOrder(tree);

System.out.println();

System.out.println("中序遍历二叉树结果: ");

tree.inOrder(tree);

System.out.println();

System.out.println("后序遍历二叉树结果: ");

tree.postOrder(tree);

System.out.println();

System.out.println("层次遍历二叉树结果: ");

tree.LayerOrder(tree);

System.out.println();

System.out.println("F所在的层次: "+tree.level("F"));

System.out.println("这棵二叉树的高度: "+tree.height());

System.out.println("--------------------------------------");

tree.reflect();

System.out.println("交换每个节点的孩子节点后......");

System.out.println("前序遍历二叉树结果: ");

tree.preOrder(tree);

System.out.println();

System.out.println("中序遍历二叉树结果: ");

tree.inOrder(tree);

System.out.println();

System.out.println("后序遍历二叉树结果: ");

tree.postOrder(tree);

System.out.println();

System.out.println("层次遍历二叉树结果: ");

tree.LayerOrder(tree);

System.out.println();

System.out.println("F所在的层次: "+tree.level("F"));

System.out.println("这棵二叉树的高度: "+tree.height());

}

二叉树怎么建立?

二叉树建立方法:

一、我们要明确的一点是只有中序是无法创建二叉树的,它要结合先序,两者相联系才可以。

二、根据二叉树的图,得出先序的顺序是ABDECFG,而与此同时的中序DBEAFCG,根据这个建立。

三、然后就是要根据二叉树的原则编写代码,你要知道的是前序遍历序列中的首元素是二叉树的根节点。

四、然后你要做的是在中序遍历序列中找到这个节点,他是中间的分水岭,前面其左节点,后面是右节点。

五、最后要做的是建立根节点的左子树和右子树,再由中序  遍历序列中根节点的位置确定我们前面提到的子树的节点,这样二叉树就差不多建立完成了。

从0开始——树(二叉树)

1.树的定义

1.在二叉树的第i层最多有2^(i-1)个结点。(i=1)

2.深度为k的二叉树最多有(2^k)-1个结点。(这里指的是总的结点数)

3.对于任意一颗二叉树T,若终端结点数(度为0的结点)为n0,度为2的结点为n2,n0=n2+1.

推导如下:

a.假设度为1的节点为n1,总结点数n=n0+n1+n2;

b.连接数=n-1=n1+2 n2

c.因此n0+n1+n2-1=n1+2 n2

得出: n0=n2+1

4.具有n个结点的完全二叉树的深度k=log2n+1

推导如下:

由性质2,满二叉树的总结点数为n = 2^k -1;

k=log2(n+1)

满二叉树倒数第二层的总结点数为 n = 2^(k-1)-1;

因此完全二叉树在这2者之间:

2^(k-1)-1n= 2^k -1

由于n是整数,因此

2 (k-1)=n2 k 同事取对数 k-1 = log2(n)k

因此具有n个结点的完全二叉树的深度k=log2n+1

0.二叉树的创建

1.前序遍历

若二叉树为空,则空操作返回,否则先访问根结点,然后访问左子树,最后访问右子树。

2.中序遍历

若二叉树为空,则空操作返回,否则先访问左子树,然后访问根结点,最后访问右子树。

3.后序遍历

若二叉树为空,则空操作返回,否则先访问左子树,然后最后访问右子树,最后访问根结点。

4.层序遍历

若二叉树为空,则空操作返回,否则从树的第一层,也就是根节点开始往下遍历,同一层中从左往右遍历。

Java二叉树构造问题 要求:从控制台输入一行扩展二叉树的字符串,然后根据这个字符串构造二叉树。THX..

测试类:

package tree;

import java.util.*;

public class Test {

public static void main(String[] args){

ListTree trees=new ArrayListTree();

int id=1;

Tree tree1=new Tree(0,id++,"张三丰");

Tree tree2=new Tree(tree1.getId(),id++,"武当宋大侠宋远桥");

Tree tree3=new Tree(tree1.getId(),id++,"武当俞二侠俞莲舟");

Tree tree4=new Tree(tree1.getId(),id++,"武当俞三侠俞岱岩");

Tree tree5=new Tree(tree1.getId(),id++,"武当张四侠张松溪");

Tree tree6=new Tree(tree1.getId(),id++,"武当张五侠张翠山");

Tree tree7=new Tree(tree1.getId(),id++,"武当殷六侠殷梨亭");

Tree tree8=new Tree(tree1.getId(),id++,"武当莫七侠莫声谷");

Tree tree9=new Tree(tree6.getId(),id++,"明教张无忌");

Tree tree13=new Tree(tree2.getId(),id++,"叛徒宋青书");

Tree tree10=new Tree(0,id++,"任我行");

Tree tree11=new Tree(tree10.getId(),id++,"令狐冲");

Tree tree12=new Tree(tree10.getId(),id++,"任盈盈");

trees.add(tree1);

trees.add(tree2);

trees.add(tree3);

trees.add(tree4);

trees.add(tree5);

trees.add(tree6);

trees.add(tree7);

trees.add(tree8);

trees.add(tree9);

trees.add(tree10);

trees.add(tree11);

trees.add(tree12);

trees.add(tree13);

for(int i=0;itrees.size();i++){

Tree tree=trees.get(i);

if(tree.getParentId()==0){

tree.showChildTree(trees);

}

}

}

}

树类:

package tree;

import java.util.List;

public class Tree {

private int parentId;

private int id;

private String showStr;

private String Spaces="";

public Tree() {

// TODO Auto-generated constructor stub

}

public Tree(int parentId,int id,String showStr){

this.parentId=parentId;

this.id=id;

this.showStr=showStr;

}

public void showChildTree(ListTree trees){

if(parentId!=0){

trees.get(id-1).setSpaces(trees.get(parentId-1).getSpaces()+" ");

}

System.out.println(trees.get(id-1).getSpaces()+showStr);

for(int i=0;itrees.size();i++){

Tree tree=trees.get(i);

if(tree.getParentId()==id){

tree.showChildTree(trees);

}

}

}

public int getParentId() {

return parentId;

}

public void setParentId(int parentId) {

this.parentId = parentId;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getShowStr() {

return showStr;

}

public void setShowStr(String showStr) {

this.showStr = showStr;

}

public String getSpaces() {

return Spaces;

}

public void setSpaces(String spaces) {

Spaces = spaces;

}

}

控制台效果图:

张三丰

武当宋大侠宋远桥

叛徒宋青书

武当俞二侠俞莲舟

武当俞三侠俞岱岩

武当张四侠张松溪

武当张五侠张翠山

明教张无忌

武当殷六侠殷梨亭

武当莫七侠莫声谷

任我行

令狐冲

任盈盈

java二叉树创建的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java二叉树的建立与遍历、java二叉树创建的信息别忘了在本站进行查找喔。

发布于 2023-04-06 22:04:01
收藏
分享
海报
46
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了