62,612
社区成员
发帖
与我相关
我的任务
分享
public static void main(String[] args) {
Search_BTree tree2=null,pre=new Search_BTree();
tree2 = Search_BTree.autoCreate(3);
tree2.createSearchBTreeEn(tree2,pre);
}
public class Search_BTree {
public Search_BTree Left;
public Search_BTree Right;
public String str;
public int ltag;//1表示指向前驱或后继 0 表示指向孩子
public int rtag;
//变为线索二叉
public void createSearchBTreeEn(Search_BTree tree,Search_BTree pre){
if(null == tree)
return ;
createSearchBTreeEn(tree.Left,pre);
if(null == tree.Left){
tree.ltag=1;
tree.Left=pre;
}
if(null == pre.Right){
pre.rtag=1;
pre.Right=tree;
}
pre = tree;
createSearchBTreeEn(tree.Right,pre);
}
//前序遍历创建二叉树
public static Search_BTree createSearchBTree(Search_BTree tree){
String str = new Scanner(System.in).next();
if(!str.equals("#")){
tree=new Search_BTree(str);
tree.Left=createSearchBTree(tree.Left);
tree.Right=createSearchBTree(tree.Right);
return tree;
}
return null;
}
//自动创建满二叉树
public static Search_BTree autoCreate(int k){
int sum = (int)Math.pow(2,k)-1;
int hasChildren = (int)Math.pow(2,k-1)-1;
Search_BTree list[] = new Search_BTree[sum+1];
for(int i=1;i<=sum;i++){
list[i]=new Search_BTree(String.valueOf(i));//全部赋值1,2,3,4.....
}
for(int i=1;i<=hasChildren;i++){
list[i].Left=list[2*i];
list[i].Right=list[2*i+1];
}
return list[1];
}
//层次遍历
public void Hierarchy(Search_BTree tree){
int current=-1,position=0;
List<Search_BTree> list = new ArrayList();
if(tree!=null){
list.add(tree);
while(current!=position){
current++;
if(list.get(current).Left!=null){
list.add(list.get(current).Left);
position++;
}
if(list.get(current).Right!=null){
list.add(list.get(current).Right);
position++;
}
}
for (Search_BTree node : list){
System.out.println(node.str);
}
}
}
//层次遍历递归
public void HierarchyDG(Search_BTree tree,int k,List list){
if(tree!=null){
if(k==1){
list.add(tree);
}
if(tree.Left!=null){
list.add(tree.Left);
}
if(tree.Right!=null){
list.add(tree.Right);
}
if(tree.Left!=null){
HierarchyDG(tree.Left,k+1,list);
}
if(tree.Right!=null){
HierarchyDG(tree.Right,k+1,list);
}
}
}
public Search_BTree() {
}
public Search_BTree(String str) {
this.str = str;
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Search_BTree {
public Search_BTree Left;
public Search_BTree Right;
public String str;
public int ltag;//1表示指向前驱或后继 0 表示指向孩子
public int rtag;
//变为线索二叉
public void createSearchBTreeEn(Search_BTree tree,Search_BTree pre){
if(null == tree)
return ;
createSearchBTreeEn(tree.Left,pre);
if(null == tree.Left){
tree.ltag=1;
tree.Left=pre;
}
if(null == pre.Right){
pre.rtag=1;
pre.Right=tree;
}
pre = tree;
createSearchBTreeEn(tree.Right,pre);
}
//前序遍历创建二叉树
public static Search_BTree createSearchBTree(Search_BTree tree){
String str = new Scanner(System.in).next();
if(!str.equals("#")){
tree=new Search_BTree(str);
tree.Left=createSearchBTree(tree.Left);
tree.Right=createSearchBTree(tree.Right);
return tree;
}
return null;
}
//自动创建满二叉树
public static Search_BTree autoCreate(int k){
int sum = (int)Math.pow(2,k)-1;
int hasChildren = (int)Math.pow(2,k-1)-1;
Search_BTree list[] = new Search_BTree[sum+1];
for(int i=1;i<=sum;i++){
list[i]=new Search_BTree(String.valueOf(i));//全部赋值1,2,3,4.....
}
for(int i=1;i<=hasChildren;i++){
list[i].Left=list[2*i];
list[i].Right=list[2*i+1];
}
return list[1];
}
//层次遍历
public void Hierarchy(Search_BTree tree){
int current=-1,position=0;
List<Search_BTree> list = new ArrayList();
if(tree!=null){
list.add(tree);
while(current!=position){
current++;
if(list.get(current).Left!=null){
list.add(list.get(current).Left);
position++;
}
if(list.get(current).Right!=null){
list.add(list.get(current).Right);
position++;
}
}
for (Search_BTree node : list){
System.out.println(node.str);
}
}
}
//层次遍历递归
public void HierarchyDG(int k,List list,List<Search_BTree> children){
if(children.size() == 0)
return;
if(k==1){
for (Search_BTree search_BTree : children) {
list.add(search_BTree);
}
}
List<Search_BTree> newChildren = new ArrayList<Search_BTree>();
for (int j = 0; j < children.size(); j++) {
Search_BTree tree = children.get(j);
if(tree!=null){
if(tree.Left!=null){
list.add(tree.Left);
newChildren.add(tree.Left);
}
if(tree.Right!=null){
list.add(tree.Right);
newChildren.add(tree.Right);
}
// if(tree.Left!=null){
// HierarchyDG(tree.Left,k+1,list);
// }
// if(tree.Right!=null){
// HierarchyDG(tree.Right,k+1,list);
// }
}
}
HierarchyDG(k+1, list, newChildren);
}
public Search_BTree() {
}
public Search_BTree(String str) {
this.str = str;
}
public static void main(String[] args) {
Search_BTree tree2=null;
tree2 = Search_BTree.autoCreate(3);
Search_BTree search_BTree = new Search_BTree();
List<Search_BTree> list = new ArrayList<Search_BTree>();
List<Search_BTree> children = new ArrayList<Search_BTree>();
children.add(tree2);
search_BTree.HierarchyDG(1, list, children);
for (Search_BTree item : list) {
System.out.println(item.str);
}
}
}
就改了递归的地方,你试试