题目:遍历树结构所有叶结点
假设有树一棵
root
 nodeA
   leafA1
   leafA2
 nodeB
   nodeB1
    leafB11
   nodeB2
    leafB22这个算法要把nodeA节点下的叶节点leafA1和leafA2
nodeB1节点下的leafB11
nodeB2节点下的leafB22显示出来,其它的不显示该如何实现这道题让我的智商为0,神阿救救我吧!

解决方案 »

  1.   

    interface Node<T>
    {
        .....
    }class LeafNode implements Node
    {
        .....
    }class RootNode implements Node
    {
         private List<Node> nodes;
         public List<Node> getChildren()
         {
               return nodes;
          }
         ....
    }下面遍历一个RootNode
    public void iterateNode(RootNode root)
    {
          for (Node node : root.getChildren())
          {
                if (node instanceof RootNode)
                {
                        iterateNode((RootNode) node);
                 }
                 else
                 {
                        showLeaf((LeafNode) node);
                  }
           }
    }
      

  2.   

    或者用while语句
    public void iterateNode(RootNode root)
    {
         Queue<RootNode> queues = new ArrayList();
         queues.offer(root);
         while (!queues.isEmpty())
         {
              RootNode rootNode = queues.remove();
              for (Node node : rootNode.getChildren())
              {
                    if (node instanceof RootNode)
                    {
                            queues.offer((RootNode) node);
                     }
                     else
                     {
                             showLeaf((LeafNode) node);
                      }
               }
         }
    }