浏览 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 示例数据如上图所示,求解,不胜感激。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-06-08
高手何时出现?
|
|
返回顶楼 | |
发表时间: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; } } |
|
返回顶楼 | |
发表时间:2012-11-08
高手已出!3楼……
|
|
返回顶楼 | |