函数返回树的叶子

时间:2017-03-18 03:13:11

标签: java arrays tree

我有树结构:

public class Tree{
  int topSize = 10 ;
  Tree[] children2 = new Tree[topSize];
  Tree parent;
  String data;
  int i = 0;
   public void addChild(Tree child) {
      child.setParent(this);
      this.children2[i++] = child;
   }
}

我在我的程序中使用它,例如:

example 1:                           example 2:
          F                             H
         /                             / \
        E                             I   J
       /                             /
      D                             T
     /
    C

我希望功能能给我一个结果:WB 示例1:函数应返回一个数组:C(树节点)
例2:函数return me result in array [0] = T(树节点有数据T),array [1] = J(树节点)。

我需要将示例1和示例2中的发束展平为:

example 1         example 2
solution          solution
    F                 H
 /  |  \            / | \
E   D  C           I  J  T

我有以下函数接受leaf作为参数:

public static Tree find(Tree edge){
    if(edge != edge.parent){
        edge.parent = find(edge.parent);
        edge.parent.addChild(edge);
    }
    return edge.parent;
}

所以在例如1中我使用:find(C)
例如2我认为我应该使用:find(T)然后find(edge J)。
 在main中,我给出了包含以下内容的数组:

treeArray[0]
data="d",                          children[] -    children[3]->data="c",children[0]->data="a", children[0]=null                                                                                                   
                                    /     \       
children[0]->data="b",children[0]=null    children[1]->data="b",children[0]=null

我有同样的孩子但我删除它所以我想

1 个答案:

答案 0 :(得分:1)

我认为您正在采用以下方法:

  public static void findLeaves(Tree root, List<Tree> leaves){

        //iterate over children 
        for(Tree child : root.children2) { //better use getter 

            //if child has no children it is a leaf. Add it to list 
            if(! hasChildren(child))  leaves.add(child);
            //if child has children, check them 
            else  findLeaves(child, leaves);
        }

        return ;
  } 

  static boolean hasChildren(Tree child) {

      for(int i=0; i < child.children2.length; i++) {

          if(child.children2[i] != null) return true;
      }
      return false;
  }

该方法应将所有叶子(没有子节点的节点)添加到List<Tree> leaves(如果需要,可以将其转换为数组)。
使用它:

List<Tree> leaves = new ArrayList<>();//a list to hold leaves after method runs
findLeaves(root, leaves);

请注意:
我无法跑步并检查方法。请仔细检查 2.该方法不是安全的。 rootleaves都不应为空