bluesmile979(笑着) 、 qiuwanbin(哈哈,我呀。) :
能否说一下具体的步骤???
nc201(Bricklayer)
效率是个问题
能否说一下具体的步骤???
nc201(Bricklayer)
效率是个问题
解决方案 »
- HttpClient进行提交表单,网站返回的是一个消息框,这样怎么用HttpClient获得返回的信息
- java内存开辟和回收的问题
- 抛出:Exception in thread "main" java.lang.ClassCastException: User cannot be cast to [Ljava.lang.Object;是什么原因啊?
- 删除、迭代List中的对象为什么报ConcurrentModificationException
- 线程中的yield()方法????
- 怎麼把兩個數據庫連接綁定成一個連接,讓兩個不同的連接做的修改在一個事務中提交?
- java监听鼠标和键盘的全局事件的源代码!不要在框架面板内,就是在桌面上的代码!
- 基于socket客户断的接收流,出现EOFException是什么意思?
- Java能否写COM组件?
- 这个编译错误怎么解决?
- 如何用方向键实现TAB键的切换功能?
- swing或awt中的设置组件setsize方法的问题。奇怪啊
用循环队列实现,其长度为节点个数,
先将0进队列,var deepestID;while(如果队列不为空)
{
队列头元素出队列currentID;
if (存在以currentID为父节点的节点)//也就是说他不是叶子
{
找所有以currentID为父节点的节点ID进队列;
}
else //她为叶子节点
{
deepestID = currentID。
}
}当队列为空时,deepestID 为最深节点的ID,
然后根据父节点的关系,最后找到 0 ,求其深度。试试吧!应该可以。
相等的就是符合条件的节点,然后再找这些节点对应的路径
可能有一堆概念上的错误,高手们帮我看看吧import java.util.ArrayList;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;public class TreeTools {
private static void getLongestPath(JTree aTree) {
DefaultMutableTreeNode aNode = (DefaultMutableTreeNode) aTree
.getModel().getRoot();
//存放最远路径字符串的集合
ArrayList path = new ArrayList();
if (aNode.isLeaf()) {
return;
}
//取得节点深度
int depth = aNode.getDepth();
//取得符合条件的子节点集合
ArrayList childNode = getNodes(aNode, depth);
//按照节点取得字符串,放入集合
for (int i = 0; i < childNode.size(); i++) {
String pathString = getPathString(
(DefaultMutableTreeNode) childNode.get(i), depth);
path.add(pathString);
}
}
//取得符合条件的节点集合
private static ArrayList getNodes(DefaultMutableTreeNode aNode, int depth) {
//创建存放符合条件的节点对象的容器
ArrayList childNode = new ArrayList();
if (aNode.isLeaf()) {
return childNode;
}
//遍历子节点,将节点层次与根节点深度相等的节点,即最远节点放入数组
for (int i = 0; i < aNode.getChildCount(); i++) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) aNode
.getChildAt(i);
//取得节点层次
int nodeLevel = node.getLevel();
//如果层次和根节点深度相等,将节点加入字符串
if (nodeLevel == depth) {
childNode.add(node);
}
ArrayList aChildNode = getNodes(node, depth);
if (aChildNode.size() != 0) {
for (int j = 0; j < aChildNode.size(); j++) {
childNode.add(aChildNode.get(j));
}
}
}
return childNode;
}
//根据节点回溯到根节点,取得各个节点的显示值,组成字符串
private static String getPathString(DefaultMutableTreeNode aNode, int depth) {
StringBuffer pathBuffer = new StringBuffer();
for (int i = 0; i < depth; i++) {
TreeNodeData nodeData = (TreeNodeData) aNode.getUserObject();
pathBuffer.append(nodeData.getDisplayValue().toString());
aNode = (DefaultMutableTreeNode) aNode.getParent();
}
return pathBuffer.toString();
}
}public class TreeNodeData {
private Object displayValue;
private Object key;
private Object parentKey;
public TreeNodeData() {
}
public Object getKey() {
return key;
}
public void setKey(Object key) {
this.key = key;
}
public void setParentKey(Object parentKey) {
this.parentKey = parentKey;
}
public Object getParentKey() {
return parentKey;
}
public void setDisplayValue(Object displayValue) {
this.displayValue = displayValue;
}
public Object getDisplayValue() {
return displayValue;
}
public String toString() {
if (displayValue != null)
return displayValue.toString();
else
return key.toString();
}
}
(因为同层的节点先找到谁不一定):
根据你给的图,下面的队列最左边是队列头
A deepestID = 0
DCB deepestID = 0
EFDC deepestID = 0
GEFD deepestID = 0
HGEF deepestID = F.ID
HGE deepestID = F.ID
IJHG deepestID = F.ID
KIJH deepestID = F.ID
KIJ deepestID = H.ID
KI deepestID = J.ID
K deepestID = I.ID
deepestID = K.ID
跳出循环,K就是深度最深的叶子,或者最深的叶子之一,
然后根据 最深的K.ID 求深度,
这么做只能算出树的深度,不能求出所有最深的深度的叶子节点,
如果单纯的求树的深度应该够了。
我回去试试看,我现在头都想疼了:)Taelohn(点烟看帖)
我是在网页上用的,可惜了!
队列里存的对象为:ArrayList list //所有节点存放在这里。
class node
{
int ID;
int depth; //深度
}
class deepestID
{
int depth;
Arraylist IDs;
}
deepestID deepestIDs ;
node A = new node(0,0);//(ID, depth)
A进队列while(如果队列不为空)
{
队列头元素出队列currentID;
if (存在以currentID为父节点的节点)//也就是说他不是叶子
{
while(存在以currentID为父节点的节点)
{
找的节点 D
node temp = new node(D.ID, currentID.depth + 1)
进队列
将该节点从list删除
}
}
else //她为叶子节点
{
if(currentID.dept > deepestIDs.dept )
{
重新初始化 deepestIDs;
}
else if(currentID.dept = deepestIDs.dept )
{
将currentID加入到deepestIDs
}
}
}最后得到的对象deepestIDs.IDs保存着所有的最深的ID。