zoukankan      html  css  js  c++  java
  • java 遍历树节点 同时保留所有的从根到叶节点的路径

    直接在代码。稍后细说

    数据结构定义:

    /**
     * 
     */
    package Servlet;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author lei
     *
     */
    public class node {
    private String text;
    private List<node>childList;
    public String getText() {
    	return text;
    }
    public void setText(String text) {
    	this.text = text;
    }
    public List<node> getChildList() {
    	return childList;
    }
    public void setChildList(List<node> childList) {
    	this.childList = childList;
    }
    public static node getInitNode()
    {
    	node nodeA=new node();
    	nodeA.setText("A");
        node nodeB=new node();
        nodeB.setText("B");
        node nodeC=new node();
        nodeC.setText("C");
        node nodeD=new node();
        nodeD.setText("D");
        node nodeE=new node();
        nodeE.setText("E");
        
        List<node>lstB=new ArrayList();
        lstB.add(nodeC);
        lstB.add(nodeD);
        nodeB.setChildList(lstB);
        
        List<node>lstA=new ArrayList();
        lstA.add(nodeB);
        lstA.add(nodeE);
        nodeA.setChildList(lstA);
        return nodeA;
        
    }
    }
    

    遍历并保存路径

    /**
     * 
     */
    package Servlet;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Stack;   
    /**
     * @author lei
     *
     */
    public class IteratorNodeTool {
    	Map<String,List> pathMap=new HashMap();//记录全部从根节点到叶子结点的路径
    	private void print(List lst)//打印出路径
    	{
    		Iterator it=lst.iterator();
    		while(it.hasNext())
    		{
    			node n=(node)it.next();
    			System.out.print(n.getText()+"-");
    		}
    		System.out.println();
    	}
    	public void iteratorNode(node n,Stack<node> pathstack)
    	{
    		  pathstack.push(n);//入栈
    		  List childlist=n.getChildList();
    		  if(childlist==null)//没有孩子 说明是叶子结点
    		  {
    			  List lst=new ArrayList();
    			  Iterator stackIt=pathstack.iterator();
    			  while(stackIt.hasNext())
    			  {
    				  lst.add(stackIt.next());
    				  
    			  }
    			  print(lst);//打印路径
    		     pathMap.put(n.getText(), lst);//保存路径信息
    		    return;
    		  }else
    		  {
    			  Iterator it=childlist.iterator();
    			  while(it.hasNext())
    			  {
    				   node child=(node)it.next();
    				   iteratorNode(child,pathstack);//深度优先 进入递归
    				   pathstack.pop();//回溯时候出栈
    			  }
    			  
    		  }
    		  
    	}
    	public static void main(String[] args) {
    		Stack <node>pathstack=new Stack();
    		node n=node.getInitNode();
    		IteratorNodeTool  tool=new IteratorNodeTool();
    		tool.iteratorNode(n, pathstack);
    	}
    
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    vue chrome调试工具开启
    mac显示隐藏文件
    mac网络变慢?
    57-文件处理小结
    56-文件修改的两种方式
    54-with管理文件操作上下文
    53-文件的三种打开方式
    51-基本文件操作
    50-Python2和3字符编码的区别
    49-字符编码
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4666950.html
Copyright © 2011-2022 走看看