--------X--------
----X-------X----
--X---X---X---X--
-X-X-X-X-X-X-X-X-
XXXXXXXXXXXXXXXXX 最底层 顶层一个节点,下一层有 两个 然后4, 8,16个 最底层是16个字符
请帮忙用递归的方法 画一下这个二叉树的图 我想了好久总是不对 请高手指点下
----X-------X----
--X---X---X---X--
-X-X-X-X-X-X-X-X-
XXXXXXXXXXXXXXXXX 最底层 顶层一个节点,下一层有 两个 然后4, 8,16个 最底层是16个字符
请帮忙用递归的方法 画一下这个二叉树的图 我想了好久总是不对 请高手指点下
http://www.javaeye.com/topic/438002
-
http://www.javaeye.com/topic/155158
-
http://www.javaeye.com/topic/271176
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
boolean [] table=new boolean[17];
DrawTree(table, 0);
}
public static void DrawTree(boolean[] table,int deep)
{
boolean[] drawTable=new boolean[table.length];
System.arraycopy(table, 0, drawTable, 0, table.length);
if(deep==5)
{
return;
}else {
int temp=-1;boolean ctr=true;
for(int j=0;j<table.length;j++)
{
if(!table[j])
{
if(ctr)
{
temp=j;
ctr=false;
table[j]=true;
}else {
table[j]=true;
table[(temp+j+1)/2]=false;
ctr=true;
}
}else {
table[j]=true;
}
}
DrawTree(table,deep+1);
for(int i=0;i<drawTable.length;i++)
{
if(drawTable[i])
System.out.print("-"); else
System.out.print("X");
}
System.out.println();
}
}}
----------------X----------------
--------X---------------X--------
----X-------X-------X-------X----
--X---X---X---X---X---X---X---X--
-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXpublic class test2 { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
boolean [] table=new boolean[33];
DrawTree(table, 0);
}
public static void DrawTree(boolean[] table,int deep)
{
//对照table画出当前deep(行)的内容 false画‘X’true画'-'
//用drawTable保存table,因为后面要改变table
boolean[] drawTable=new boolean[table.length];
System.arraycopy(table, 0, drawTable, 0, table.length);
//计算deep的深度是否到达2^deep=N;
if(deep==(int)(Math.log(table.length)/Math.log((double)2))+1 )
{
return;
}else {
//改变table的内容 及计算下次应当如何画
//思想:遇前两个'X'合并为一个‘X’ 第a个和第b个 合并为((a+b)+1)/2
int temp=-1;//记录a的index
boolean ctr=false;//控制是否找到了一个‘X’
for(int j=0;j<table.length;j++)
{
if(!table[j])
{
table[j]=true;
if(!ctr)//找到第一个
{
temp=j;
ctr=true;
}else {
table[(temp+j+1)/2]=false;
ctr=false;//找到2个后 重新标记
}
}else {
table[j]=true;
}
}
DrawTree(table,deep+1); //查找deep的下一层
//对照drawTable 画出图形
for(int i=0;i<drawTable.length;i++)
{
if(drawTable[i])
System.out.print("-"); else
System.out.print("X");
}
System.out.println();
}
}}
这个问题有什么好的解决方法吗?