日期:2014-05-20  浏览次数:20652 次

用递归写一个方法打印一个叉树节点,中软国际面试题
如题, 用递归写一个方法打印一个叉树节点,应该如何写呢?求指点阿,谢谢了!!

------解决方案--------------------
public void treeTraversal(Node node) {
    while(node.hasNextChild()) {
        childnode = node.nextChild();
        print(childnode);
        treeTraversal(childnode);  
    }
}

------解决方案--------------------
public static String getTreeInfo(Branch root){
ArrayList<ICorp> subordinateList = root.getSubordinate();
String info = "";
for(ICorp s :subordinateList){
if(s instanceof Leaf){ //叶子节点
      info = info + s.getInfo()+"\n";
}else{ //非叶子节点
      info = info + s.getInfo() +"\n"+ getTreeInfo((Branch)s);
 }
}
return info;
}

遍历叉树分为深度优先和广度优先,上面的为深度优先,依据用户传递来的节点获得该节点下的所以节点信息。
并且树状模型很符合组合模式:

所有节点都是一个对象,树枝节点和叶子节点有许多共性。
------解决方案--------------------

public void treeTraversal(Node node) {
if(有子节点){
for(node中所有的子节点i)
treeTravelsal(i);
}
System.out.println(a.value);

楼主我写过一个二叉树的打印方法,不妨参考下
https://www.dropbox.com/s/j497saw4ppy6ojk/TestNode.java
------解决方案--------------------
给几段伪代码

//先序
traversal(Node n) {
  print(n);//输出
  if(n.hasLeft()) {
     traversal(n.left);
  }
  if(n.hasRight()) {
     traversal(n.right);
  }
}

//中序
traversal(Node n) { 
  if(n.hasLeft()) {
     traversal(n.left);
  }
  print(n);//输出
  if(n.hasRight()) {
     traversal(n.right);
  }
}

//后序
traversal(Node n) { 
  if(n.hasLeft()) {
     traversal(n.left);
  } 
  if(n.hasRight()) {
     traversal(n.right);
  }
  print(n);//输出
}