組合樹的結構
組合樹的**實現
從集合構造樹
求樹最左邊的葉子節點
求樹最右邊的葉子節點
樹節點的前序遍歷
樹節點的後序遍歷
刪除樹中指定點前面的節點
刪除樹當中指定點後面的節點
樹的裁剪
在樹上執行向上彙總(利用倒序)
組合樹的結構uml
組合樹的**實現 :略
從集合構造樹:主要是遞迴方法的應用
public class constructtree
/***根據集合和給定的節點,新增給定節點的全部子節點 關鍵遞迴方法
* 2001-5-16
*@param rootnode 根節點
*@param elements 存放節點元素的集合
*@param
*/public node constructttree(branchnode rootnode, listelements)
int len = elements.size();
for(int i=0; i0 )else
rootnode.setnodetype(accountcontants.account_account);
rootnode.addnode(childnode);
}} return rootnode;
}......
}
求樹最左邊的葉子節點
//查詢指定節點的的乙個葉子節點
public node getfirstleaf(node n)elseelse
}else}}
求樹最右邊的葉子節點:
//查詢指定節點的的最後乙個葉子節點
public node getlastleaf(node n)else
if(i***ternal(nn))else}}
樹節點的前序遍歷:
樹節點的後序遍歷:
listpostnodes = new arraylist();
postorder(root,postnodes);
... public void postorder(node root, listpostnodes) }}
postnodes.add(root);
return;
}
刪除樹中指定點前面的節點:首先對樹節點進行後序,再逐個查詢比較,找到該節點時,則停止。再找到該節點所有查到的節點都刪除。
public void removehead(node root,string nodeid)
iteratorit=postnodes.iterator();
while (it.hasnext())
}
刪除樹當中指定點後面的節點,首先對樹節點進行前序,再逐個查詢比較,找到該節點時,該節點後的逐個刪除。
public void removetail(node root,string nodeid);
if(b && (!nodeid.equals(i.getid())))}}
在以上2個方法的基礎上,實現樹的修剪:
//剪掉前面的節點
treeservice.removehead(root,b);
//剪掉後面的節點
treeservice.removetail(root,e);
在樹上執行向上彙總(利用倒序):
//倒序計算所有節點的值
listnodes_post=new arraylist();
treeservice.postorder_by_realleaf(root,nodes_post);
for (node item : nodes_post)
Tiny示例 對整個目錄中的POM樹進行批量處理
原來我的pom中groupid是org.tinygroup,artifactid是對應的工程名,如parser。後出有乙個處理上的原因,而且便於進行分隔,還可以避免與別人的衝突,想把所有的artifactid前面增加個 org.tinygroup.字首,比如parser就變成org.tinygrou...
Tiny示例 對整個目錄中的POM樹進行批量處理
原來我的pom中groupid是org.tinygroup,artifactid是對應的工程名,如parser。後出有乙個處理上的原因,而且便於進行分隔,還可以避免與別人的衝突,想把所有的artifactid前面增加個 org.tinygroup.字首,比如parser就變成org.tinygrou...
對軟體構造中裝飾器設計模式的一點疑問
裝飾模式的設計理念主要是以對客戶端透明的方式動態擴充套件物件的功能,是繼承關係的乙個替代 繼承會產生大量的子類,而且 有冗餘 裝飾模式可以在不創造更多子類的情況下,將物件的功能加以擴充套件。裝飾模式把客戶端的呼叫委派到被裝飾類。裝飾模式的關鍵在於這種擴充套件完全是透明的 裝飾模式的透明性要求客戶端程...