论坛首页 综合技术论坛

二叉树算法

浏览 3978 次
锁定老帖子 主题:二叉树算法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-06-06  
 
   //输入参数为广度优先算法遍历的二叉树字符串LIST,每个节点对应子节点数LIST。
   //
  public static TreeNode<String> rebuildFromBFSList(List<String> bfsData, List<Integer> childCounts)
  {
    // TODO: your code for part (b)
    return null;
  }



bfsData  A B C D E F G
childCounts  6 4 0 0 2 0 0


    //       A
    //      / \
    //     B   C
    //    / \
    //   D   E
    //      / \
    //     F   G


示例数据如上图所示,求解,不胜感激。
   发表时间:2012-06-08  
高手何时出现?
0 请登录后投票
   发表时间:2012-11-08  
/**
* 解析类
*/
package com.bonc.chenxj.studyProject.BFtree;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
* @author
*
*/
public class BFTree {

  public static NodeTree<String> rebuildFromBFSList(List<String> bfsData, List<Integer> childCounts)
  {
    // TODO:
Queue<NodeTree<String>> nodes=new LinkedList<NodeTree<String>>();
if(bfsData.size()==childCounts.size()){
NodeTree<String> currentNode=null;
for(int i=bfsData.size()-1;i>=0;i--){
int allChildren=childCounts.get(i);
String content=bfsData.get(i);
if(allChildren==0){
currentNode=new NodeTree<String>(content,true);
}else if(allChildren>0){
currentNode=new NodeTree<String>(content,false);
NodeTree<String> t=null;
while(allChildren>0){
t=nodes.poll();
if(t!=null){
currentNode.addChildren(t);
allChildren=allChildren-t.getNodeCount();
if(allChildren<0){
System.out.println("输入有错,无法解析");
}
}else{
System.out.println("输入有错,无法解析");
return null;
}
}
}
else{
System.out.println("输入有误,子节点数目不能出现负值!");
return null;
}
nodes.offer(currentNode);
}
return currentNode;
}

    return null;
  }
 
  public static void main(String[] args){
  String[] arr={"A","B","C","D","E","F","G"};
  Integer[] counts={6,5,1,2,0,0,0,};
  List<String> aa=new ArrayList<String>();
  List<Integer> bb=new ArrayList<Integer>();
  for(int i=0;i<arr.length;i++){
  aa.add(arr[i]);
  bb.add(counts[i]);
  }
  NodeTree<String> root=BFTree.rebuildFromBFSList(aa, bb);
  root.toString();
  }
 
 
}



package com.bonc.chenxj.studyProject.BFtree;

import java.util.ArrayList;
import java.util.List;

/**
* @author chenxiaojing
*
*/
public class NodeTree<T> {

private T node;
private boolean isLeaf;
private List<NodeTree<T>> childrens=new ArrayList<NodeTree<T>>();

public NodeTree (T node,boolean isleaf){
this.node=node;
this.isLeaf=isleaf;
}
public boolean addChildren(NodeTree<T> child){
if(!isLeaf&&childrens.size()<2){
childrens.add(child);
}
return false;
}

public T getNodeContent(){
return node;
}
public int getNodeCount(){
int count=1;
for(NodeTree<T> child:childrens){
count=count+child.getNodeCount();
}
return count;
}
}
0 请登录后投票
   发表时间:2012-11-08  
高手已出!3楼……
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics