绘制二叉树
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; } }
相关文章推荐
- 利用pygraphviz绘制二叉树
- 在WPF的Canvas上绘制二叉树
- 使用graphviz绘制二叉树(二)
- 【u103】绘制二叉树
- python绘制二叉树的实现
- vis 绘制二叉树
- 模拟——洛谷P1185 绘制二叉树
- 使用graphviz绘制二叉树
- PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
- 二叉树绘制器BinaryTreeDrawer实现
- 不用栈实现二叉树非递归中序遍历
- Highcharts绘制直线图
- OpenCV: 寻找图像轮廓并绘制
- 二叉树及其实现
- 二叉树两个节点的最低公共最先问题
- 算法题17 重建二叉树
- 面试准备之--二叉树打印
- iOS二叉树
- 遍历二叉树
- Lowest Common Ancestor of a Binary Tree(二叉树公共祖先)