题解 | #二叉树中和为某一值的路径(二)#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

1、递归:

ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
	PrintExcute(pRoot,0);
	return list;  
}

private void PrintExcute(TreeNode pRoot, int deep) {
	if(pRoot == null) {
		return;
	}
	if(deep >= list.size()) {			//如果当前深度超过list大小,在list中添加新的数组
		list.add(deep,new ArrayList<Integer>());
	}
	if(deep % 2 == 0) {					//判断深度奇偶
		list.get(deep).add(pRoot.val);  //在list的第deep元素的末尾添加值
	}else {
		list.get(deep).add(0,pRoot.val);//在list的第deep元素的首位添加值
	}
	PrintExcute(pRoot.left,deep+1);		//递归
	PrintExcute(pRoot.right,deep+1);	//递归
}

2、队列:

public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
	ArrayList<ArrayList<Integer>> list = new ArrayList<>();
	if(pRoot == null) {
		return list;
	}
	Queue<TreeNode> queueNode = new LinkedList<TreeNode>();;
	queueNode.offer(pRoot);
	boolean islr = true; 
	while(!queueNode.isEmpty()) {
		ArrayList<Integer> tmpArray = new ArrayList<>();	//临时数组,储存当前深度的树的值
		int size = queueNode.size();						//当前队列的大小,也即当前深度的元素的数量
		for(int i = 0; i < size; i++) {
			TreeNode node = queueNode.poll();				//Queue.pull返回队列的第一个元素并将其移出除队列
			if(islr) {
				tmpArray.add(node.val);						//将元素添加到数组的末尾
			}else {
				tmpArray.add(0,node.val);					//将元素添加到数组的最前
			}
			if(node.left != null) {
				queueNode.offer(node.left);					//左子树入队
			}
			if(node.right != null) {	
				queueNode.offer(node.right);				//右子树入队
			}
		}
		if(tmpArray.size() != 0) {
			list.add(tmpArray);								//添加到list中
		}
		islr = !islr; 										//每次遍历完一次深度修改值,即修改下一深度的排序
	}
	
	return list;
	
}
全部评论

相关推荐

牛客263158796号:我领羊一面后十天不挂也不推进 今天问hr说等前序的第一批意向发完看情况再看是否推进
点赞 评论 收藏
分享
头像
10-22 19:18
上海大学 后端
jopajhhdjwnqk:水印都叠杀人书了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务