遍历估计谁都会,你是指在不改BinaryNode定义的前提下空格输出难办吗?
解决方案 »
- 关于socket聊天室 用线程池怎么实现?
- 求教高手·
- Java打印所需的外部jar包在哪下载啊?
- 如何让JButton的text和icon分为上下显示,而不是默认的左右显示?
- java 五子棋 怎样保存以放上的棋子的坐标点
- JTextPane怎么不能自动换行?
- 关于Applet的几个问题
- 哪边有jsp和servlet的资料
- 关于OTA开发的问题,100分相赠!!
- for循环问题。求给出详细的步骤注解搞了半天没弄懂
- 请问一个多线程synchronized同步的问题!!!!!!!!!!!!!!!!!!!!!!
- 小弟刚来,想知道学java用什么开发环境好,或说当前企业多用什么?(分多多派,来了就有)
执行完后将加全局变量的值减一.
printTree()
{
count++; //所有执行语句的最前面.
执行打印;//紧接上面语句
.....
count--; //所有执行语句的最后面.
}
{
class Node
{
String name;
Node leftNode;
Node rightNode;
public Node(String name){
this.name = name;
this.leftNode = null;
this.rightNode = null;
}
}
Node root=null;
private int count;
public BinaryNode(){
root = new Node("Root");
root.leftNode = new Node("NODE3");
root.leftNode.leftNode = new Node("NODE4");
root.rightNode = new Node("NODE6");
root.rightNode.leftNode = new Node("NODE5");
root.rightNode.rightNode = new Node("NODE7");
}
public void printTree(){
count = 0;
print(root);
}
private void print(Node n){
if(n==null)
return;
for(int i=0;i<count;i++)
System.out.print(' ');
System.out.println(n.name);
count++;
print(n.leftNode);
print(n.rightNode);
count--;
}
public static void main(String[] args){
BinaryNode test = new BinaryNode();
test.printTree();
}
}
s.push(new Integer(0));
s.push(root);
while(!s.empty()){
Node n = (Node)s.pop();
Integer iSpace = (Integer)s.pop();
int iNum = iSpace.intValue();
for(int i=0;i<iNum;i++)
System.out.print(' ');
System.out.println(n.name);
iNum++ ;
if(n.rightNode != null){
s.push(new Integer(iNum));
s.push(n.rightNode);
}
if(n.leftNode != null){
s.push(new Integer(iNum));
s.push(n.leftNode);
}
}
}
FU......
说句实话,你想了多久??
因为限时40分钟,另外两个题目估计只要10分钟。
这是我回来后想出来的代码。
public void printTree()
{
class TestNode
{
public void printTree(Node node,int level)
{
for (int i=0;i<level;i++) System.out.print(" ");
System.out.println(node.name);
if (node.leftNode!=null) printTree(node.leftNode,level+1);
if (node.rightNode!=null) printTree(node.rightNode,level+1);
}
}
new TestNode().printTree(root,0);
}
//当时只想到了改变接口会好做的多,但没有想到 可以在函数内构建一个内部类,再加以调用。
private void print(Node n){
if(n==null)
return;
for(int i=0;i<count;i++)
System.out.print(' ');
System.out.println(n.name);
count++;
print(n.leftNode);
print(n.rightNode);
count--;
}
不要揍我!................我知道你们也看出来了这个关键...........嘿嘿
邮箱:[email protected]
import java.util.*;
public class BinaryNode { class Node
{
String name;
Node leftNode;
Node rightNode;
}
Node root;
public void printTree(){
int i=0,j;
root=new Node();
root.name="root";
root.leftNode=new Node();
root.rightNode=new Node();
root.leftNode.name="node3";
root.rightNode.name="node6";
root.leftNode.leftNode=new Node();
root.leftNode.leftNode.name="node4";
root.rightNode.leftNode=new Node();
root.rightNode.rightNode=new Node();
root.rightNode.leftNode.name="node5";
root.rightNode.rightNode.name="node7";
/*
root.leftNode=new Node();
root.rightNode=new Node();
root.leftNode.name="node1";
root.rightNode.name="node2";
root.leftNode.leftNode=new Node();
root.leftNode.rightNode=new Node();
root.leftNode.leftNode.name="node3";
root.leftNode.rightNode.name="node4";
root.rightNode.leftNode=new Node();
root.rightNode.rightNode=new Node();
root.rightNode.leftNode.name="node5";
root.rightNode.rightNode.name="node6";
root.leftNode.leftNode.leftNode=new Node();
root.leftNode.leftNode.rightNode=new Node();
root.leftNode.leftNode.leftNode.name="node7";
root.leftNode.leftNode.rightNode.name="node8";
root.leftNode.rightNode.leftNode=new Node();
root.leftNode.rightNode.rightNode=new Node();
root.leftNode.rightNode.leftNode.name="node9";
root.leftNode.rightNode.rightNode.name="node10";
root.rightNode.leftNode.leftNode=new Node();
root.rightNode.leftNode.rightNode=new Node();
root.rightNode.leftNode.leftNode.name="node7";
root.rightNode.leftNode.rightNode.name="node8";
root.rightNode.rightNode.leftNode=new Node();
root.rightNode.rightNode.rightNode=new Node();
root.rightNode.rightNode.leftNode.name="node9";
root.rightNode.rightNode.rightNode.name="node10";
*/
Node current=root;
Node parent=null;
Stack stk = new Stack();
String l_r="";//left or right
String space="";
down:
for(;;){
if(i==0) System.out.println(space+current.name);
if(current.leftNode!=null&&i==0){
if(parent !=null){
stk.push(parent);
stk.push(l_r);
stk.push(space);}
parent=current;
l_r="left";
space+=" ";
current=parent.leftNode;
i=0;
continue;
}
else if(current.rightNode!=null){
if(parent !=null){
stk.push(parent);
stk.push(l_r);
stk.push(space);}
parent=current;
l_r="right";
space+=" ";
current=parent.rightNode;
i=0;
continue;
}
i=0;
for(;;){ if(l_r=="left"){
current=parent;
if(!stk.empty()){
space = (String) stk.pop();
l_r = (String) stk.pop();
parent = (Node) stk.pop();
i = 1;
}
else {
space ="";
l_r="";
parent=null;
i=1;
}
continue down;
}
else{
current=parent;
if(!stk.empty()){
space = (String) stk.pop();
l_r = (String) stk.pop();
parent = (Node) stk.pop();
i = 1;
continue;
}
else return;
}
}
}
}
public static void main(String args[]){
BinaryNode bnode=new BinaryNode();
bnode.printTree();
}}
linux_328(企鹅)写得非递归算法令人佩服,希望以后多交流是的,数据结构(java版)就有这个题,与c语言版类似,先序遍历.不是太难把.