输出二叉树根节点到叶子结点所有路径

方法一:递归。每次把左节点加入到列表中,知道遇到叶节点结束,返回至上一层节点,并查其右节点,以此类推。

	private static List<String> binTreePath1(TreeNode root) {
		LinkedList<String> l = new LinkedList<String>();
		if(root==null)return l;//如果为空,返回空
		getPath(root,l,root.val+"");
		return l;
	}


	private static void getPath(TreeNode root, List<String> re, String s) {
		if(root.left==null && root.right==null) {//此时为叶节点,把s添加到结果列表中,返回
			re.add(s+"");
			return ;
		}
		if(root.left!=null)//左子树不为空,递归
			getPath(root.left,re,s+"->"+root.left.val);
		if(root.right!=null)//右子树不为空,递归
			getPath(root.right,re,s+"->"+root.right.val);
	}

方法二:在方法一的基础之上,不需要借助 getPath 函数。

	//不借用辅助函数
	private static List<String> binTreePath2(TreeNode root) {
		LinkedList<String> l = new LinkedList<String>();
		if(root==null)return l;
		if(root.left==null && root.right==null) {
			l.add(root.val+"");
			return l;
		}
		for (String s : binTreePath2(root.left)) {
			l.add(root.val+"->"+s);
		}
		for (String s : binTreePath2(root.right)) {
			l.add(root.val+"->"+s);
		}
		return l;
	}

方法三:BFS算法应用,建两个队列,一个存储节点,另一存储路径

	//队列BFS算法应用
	private static List<String> binTreePath3(TreeNode root) {
		    List<String> l=new ArrayList<String>();//结果列表
		    Queue<TreeNode> queueNode = new LinkedList<TreeNode>();//存储节点队列
		    Queue<String> queueStrPath = new LinkedList<String>();//存储路径队列
		    if(root==null)return l;
		    queueNode.add(root);
		    queueStrPath.add("");
		    while(!queueNode.isEmpty()) {
		    	TreeNode curNode = queueNode.poll();
		    	String curPath = queueStrPath.poll();
		    	if(curNode.left==null && curNode.right==null) {
		    		l.add(curPath+curNode.val);
		    	}
		    	if(curNode.left!=null) {
		    		queueNode.add(curNode.left);
		    		queueStrPath.add(curPath+curNode.val+"->");
		    	}
		    	if(curNode.right!=null) {
		    		queueNode.add(curNode.right);
		    		queueStrPath.add(curPath+curNode.val+"->");
		    	}
		    }
		    return l;
	}

最后树定义

public class TreeNode {

	public int val;
	public TreeNode left;
	public TreeNode right;
	public TreeNode(int x){val = x;};
}

猜你喜欢

转载自blog.csdn.net/weichi7549/article/details/86572788