java打印树形结构代码 java打印树形结构代码怎么写

java中把数组以二叉树形式打印出来

你说的意思应该是用数组的方式存储二叉树,这需要利用到完全二叉树的性质,

成都创新互联公司主营长春网站建设的网络公司,主营网站建设方案,成都App定制开发,长春h5重庆小程序开发搭建,长春网站营销推广欢迎长春等地区企业咨询

,完全二叉树通常采用数组而不是链表存储,其存储结构如下:

var

tree:array[1..n]of

longint;{n:integer;n=1}

对于tree[i],有如下特点:

(1)若i为奇数且i1,那么tree的左兄弟为tree[i-1];

(2)若i为偶数且in,那么tree的右兄弟为穗虚tree[i+1];

(3)若i1,tree的双亲为tree[i

div

2];枣族凳

(4)若2*i=n,那么tree的左孩子为tree[2*i];若2*i+1=n,那么tree的右孩子为tree[2*i+1];

(5)若in

div

2,那么tree[i]为叶子结点(对应于(3));

(6)若i(n-1)

div

2.那么tree[i]必有两个孩子(对应于(4))。

(7)满二叉树一定是完全二叉树,完全二叉树凳旅不一定是满二叉树。

完全二叉树第i层至多有2^(i-1)个节点,共i层的完全二叉树最多有2^i-1个节点。

代码简单,网上很多,不懂也可以问我

Java怎么实现输出是一个tree结构

树节点类:

package cn点抗 .tree;  

public class Node {  

private Integer id;  

private Integer parentId;  

private String name;  

private String link;  

public Integer getId() {  

return id;  

}  

public void setId(Integer id) {  

this.id = id;  

}  

public Integer getParentId() {  

return parentId;  

}  

public void setParentId(Integer parentId) {  

this.parentId = parentId;  

}  袜键碰

public String getName() {  

return name;  

}  

public void setName(String name) {  

this.name = name;  

}  

public String getLink() {  

return link;  

}  

public void setLink(String link) {  

this.link = link;  

}  

}

输出树形菜单类:

package cn点抗 .tree;  

import java.util.ArrayList;  

import java.util.List;  

public class Tree {  

private StringBuffer html = new StringBuffer();  

private ListNode nodes;  

public Tree(ListNode nodes){  

this.nodes = nodes;  

}  

public String buildTree(){  

html.append("ul");  

for (Node node : nodes) {  

Integer id = node.getId();  

if (node.getParentId() == null) {  

html.append("\r\nli id='" + id + "'" + node.getName()+ "/li");  

build(node);  

}  

}  

html.append("\r\n/ul");  

return html.toString();  

}  

private void build(Node node){  

ListNode children = getChildren(node);  

if (!children.isEmpty()) {  

html.append("\r\nul");  

for (Node child : children) {  

Integer id = child.getId();  

亮盯            告谈   html.append("\r\nli id='" + id + "'" + child.getName()+ "/li");  

build(child);  

}  

html.append("\r\n/ul");  

}   

}  

private ListNode getChildren(Node node){  

ListNode children = new ArrayListNode();  

Integer id = node.getId();  

for (Node child : nodes) {  

if (id.equals(child.getParentId())) {  

children.add(child);  

}  

}  

return children;  

}  

}

测试类:

package zzj.test;  

import java.util.ArrayList;  

import java.util.List;  

import cn点抗 .tree.Node;  

import cn点抗 .tree.Tree;  

public class Test {  

/** 

* @param args 

*/  

public static void main(String[] args) {  

ListNode nodes = new ArrayListNode();  

Node node1 = new Node();  

node1.setId(1);  

node1.setName("node1");  

node1.setParentId(null);  

node1.setLink(null);  

nodes.add(node1);  

Node node11 = new Node();  

node11.setId(11);  

node11.setName("node11");  

node11.setParentId(1);  

node11.setLink(null);  

nodes.add(node11);  

Node node111 = new Node();  

node111.setId(111);  

node111.setName("node111");  

node111.setParentId(11);  

node111.setLink(null);  

nodes.add(node111);  

Node node12 = new Node();  

node12.setId(12);  

node12.setName("node12");  

node12.setParentId(1);  

node12.setLink(null);  

nodes.add(node12);  

Node node2 = new Node();  

node2.setId(2);  

node2.setName("node2");  

node2.setParentId(null);  

node2.setLink(null);  

nodes.add(node2);  

Node node21 = new Node();  

node21.setId(21);  

node21.setName("node21");  

node21.setParentId(2);  

node21.setLink(null);  

nodes.add(node21);  

Node node3 = new Node();  

node3.setId(3);  

node3.setName("node3");  

node3.setParentId(null);  

node3.setLink(null);  

nodes.add(node3);  

Tree tree = new Tree(nodes);  

System.out.println(tree.buildTree());  

}  

}

如何用Java实现树形结构啊?

package tree;

import java.util.LinkedList;

import java.util.List;

/**

* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历

*

* 参考资料0:数据结构(C语言版)严蔚敏

*

* 参考资料1:

*

* 参考资料2:

*

* @author ocaicai@yeah点虐 @date: 2011-5-17

*

*/

public class BinTreeTraverse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

private static ListNode nodeList = null;

/**

* 内部类:节点

*

* @author ocaicai@yeah点虐 @date: 2011-5-17

*

*/

private static class Node {

Node leftChild;

Node rightChild;

int data;

Node(int newData) {

leftChild = null;

rightChild = null;

data = newData;

}

}

public void createBinTree() {

nodeList = new LinkedListNode();

// 将一个数组的值依次转换为Node节点

for (int nodeIndex = 0; nodeIndex array.length; nodeIndex++) {

nodeList.add(new Node(array[nodeIndex]));

}

// 对前lastParentIndex-1个父节点按照父节点与孩子核卜陪节点的数弊历字关系建立二叉树

for (int parentIndex = 0; parentIndex array.length / 2 - 1; parentIndex++) {

// 左孩子

nodeList.get(parentIndex).leftChild = nodeList

.get(parentIndex * 2 + 1);

// 右孩子

nodeList.get(parentIndex).rightChild = nodeList

.get(parentIndex * 2 + 2);

}

// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理

int lastParentIndex = array.length / 2 - 1;

// 左孩子

nodeList.get(lastParentIndex).leftChild = nodeList

.get(lastParentIndex * 2 + 1);

// 右孩子,如果数组的长度为奇数才建立右孩子改蠢

if (array.length % 2 == 1) {

nodeList.get(lastParentIndex).rightChild = nodeList

.get(lastParentIndex * 2 + 2);

}

}

/**

* 先序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void preOrderTraverse(Node node) {

if (node == null)

return;

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

preOrderTraverse(node.leftChild);

preOrderTraverse(node.rightChild);

}

/**

* 中序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void inOrderTraverse(Node node) {

if (node == null)

return;

inOrderTraverse(node.leftChild);

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

inOrderTraverse(node.rightChild);

}

/**

* 后序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void postOrderTraverse(Node node) {

if (node == null)

return;

postOrderTraverse(node.leftChild);

postOrderTraverse(node.rightChild);

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

}

public static void main(String[] args) {

BinTreeTraverse2 binTree = new BinTreeTraverse2();

binTree.createBinTree();

// nodeList中第0个索引处的值即为根节点

Node root = nodeList.get(0);

System.out.println("先序遍历:");

preOrderTraverse(root);

System.out.println();

System.out.println("中序遍历:");

inOrderTraverse(root);

System.out.println();

System.out.println("后序遍历:");

postOrderTraverse(root);

}

}


文章名称:java打印树形结构代码 java打印树形结构代码怎么写
标题路径:http://bzwzjz.com/article/ddpdpij.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 自适应网站设计 成都网站建设公司 手机网站建设 手机网站建设 网站制作公司 响应式网站设计 成都定制网站建设 成都网站建设 成都网站建设 成都网站建设 企业网站建设 成都网站建设 营销型网站建设 高端网站设计 定制网站设计 成都网站设计 网站建设 H5网站制作 成都网站制作 网站制作报价 古蔺网站建设 企业网站设计