码迷,mamicode.com
首页 > 其他好文 > 详细

之字形打印二叉树

时间:2017-09-17 17:27:51      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:evel   ack   处理   add   null   遍历   eve   return   treenode   

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
		List<List<Integer>> ans = new ArrayList<>();
		if (root == null)
			return ans;
		// 使用两个栈维护顺序
		Stack<TreeNode> stack = new Stack<>();
		Stack<TreeNode> nextStack = new Stack<>();
		stack.add(root);
		int flag = 0;
		List<Integer> lay = new ArrayList<>();
		while (!stack.isEmpty()) {
			TreeNode node = stack.pop();
			lay.add(node.val);
			// 如果当前是从左到右遍历,按左子树右子树的顺序添加
			if (flag == 0) {
				if (node.left != null)
					nextStack.add(node.left);
				if (node.right != null)
					nextStack.add(node.right);
			} else// 如果当前是从右到左遍历,按右子树左子树的顺序添加
			{
				if (node.right != null)
					nextStack.add(node.right);
				if (node.left != null)
					nextStack.add(node.left);
			}
			if (stack.isEmpty()) {
				// 交换两个栈
				Stack<TreeNode> tmp = stack;
				stack = nextStack;
				nextStack = tmp;
				// 标记下一层处理的方向
				flag = 1 - flag;
				ans.add(new ArrayList<>(lay));
				lay.clear();
			}
		}
		return ans;

	}

之字形打印二叉树

标签:evel   ack   处理   add   null   遍历   eve   return   treenode   

原文地址:http://www.cnblogs.com/blythe/p/7536026.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!