您的位置:首页 > 编程语言 > Java开发

树和森林的相互转换的Java实现

2016-06-03 18:42 369 查看
树 和 二叉树 的对应 : 用 孩子兄弟表示法  将树表示为二叉树.孩子兄弟表示法: 
123456
public
 
class
 
Tree_Forest {
    
Object data;
    
 
    
Tree_Forest firstchild;   
//该节点的第一个孩子
    
Tree_Forest nextsibling;   
//该节点的下一个兄弟
}
森林与二叉树的相互转化:
12345678910111213141516171819202122232425262728293031323334353637
import
 
java.util.ArrayList;
//树和森林. 包括树和森林的相互转化
 
public
 
class
 
Tree_Forest {
    
Object data;
    
 
    
Tree_Forest firstchild;   
//该节点的第一个孩子,也是左子树
    
Tree_Forest nextsibling;   
//该节点的下一个兄弟,也是右子树
    
 
    
 
    
//森林转为二叉树,forest表示以二叉链表表示的森林. index 为当前下表;
    
public
 
static
 
Tree_Forest ForestToBinTree(Tree_Forest[] forest,
int
 
index){
        
Tree_Forest
binTree;
        
 
        
if
(forest.length == index) 
return
 
null
;
        
else
{
            
binTree = forest[index]; 
//剩余森林中的第一颗树
            
binTree.nextsibling = ForestToBinTree(forest,index+
1
);
//右子树为森林中剩余的树
        
}
        
 
        
return
 
binTree;
    
}
    
 
    
//二叉树转森林 binTre
d9f4
e为要转的二叉树; forest存放转换后的森林
    
public
 
static
 
void
 
BinTreeToForest(Tree_Forest binTree,ArrayList<Tree_Forest> forest){
        
if
(forest == 
null
) forest = 
new
 
ArrayList<>(); 
//目标森林
        
 
        
if
(binTree == 
null
return
;
        
else
{
            
Tree_Forest rightTree = binTree.nextsibling; 
//二叉树的右子树
            
binTree.nextsibling = 
null
;
            
 
            
forest.add(binTree);
//分离的第一棵树即为 binTree的根节点+其左子树
            
BinTreeToForest(rightTree,forest);
//递归
        
}
    
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息