您的位置:首页 > 其它

绘制二叉树

2013-01-25 13:50 120 查看
首先对所要绘制的二叉树进行复制及扩展,即构造映像树

递归方式构造:

public static<T>TNodeShadow buildShadowTree(TNode t,int level)
{
TNodeShadow newNode=null;
String str;
if(t!=null)
{
newNode=new TNodeShadow();
TNodeShadow newLeft=buildShadowTree(t.left,level+1);
newNode.left=newLeft;
str=(t.nodeValue).toString();
newNode.nodeValueStr=str;
newNode.level=level;
newNode.column=TNodeShadow.columnValue;
TNodeShadow.columnValue++;
TNodeShadow newRight=buildShadowTree(t.right,level+1);
newNode.right=newRight;
}
return newNode;
}


利用映像树绘制:

public static<T> String displayTree(TNode<T> t,int maxCharacter)
{
LinkedQueue<TNodeShadow> q=new LinkedQueue<TNodeShadow>();
String displayStr="";
int colWidth=maxCharacter+1;
int currLevel=0,currCol=0;
TNodeShadow.columnValue=0;
if(t==null)
return displayStr;
TNodeShadow shadowRoot=buildShadowTree(t,0);
TNodeShadow currNode;
q.push(shadowRoot);
while(!q.isEmpty())
{

currNode=q.pop();
if(currNode.level>currLevel)
{
currLevel=currNode.level;
currCol=0;
displayStr+='\n';
}
if(currNode.left!=null)
{
q.push(currNode.left);
}
if(currNode.right!=null)
{
q.push(currNode.right);
}
for(int i=0;i<currNode.column;i++)
{
displayStr+=' ';
}
displayStr+=currNode.nodeValueStr;
currCol++;
}
displayStr+="\n";
clearShadowTree(shadowRoot);
return displayStr;
}

绘制完成后递归清除映像树:

public static<T> void clearShadowTree(TNodeShadow t)
{
if(t!=null)
{
clearShadowTree(t.left);
clearShadowTree(t.right);
t=null;
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  绘制 二叉树