1、之字形层序遍历
如上如二叉树,之字形层序遍历:
第一层:从左至右 打印A
第二层:从右至左 打印GB
第三层:从左至右 打印CDH
第四层:从右至左 打印FE
2、代码实现
2.1两个栈实现二叉树的层次遍历
以第一层和第二层遍历为例:
第一层:
step1: 根节点入栈stack1,stack2为空,从左至右遍历;stack1或者stack2不为空,进入step2;
step2: 存放当前层元素的栈为stackCurrent,存放下一层元素的栈为stackNext,
stackCurrent = stack1(不为空,A); stackNext = stack2(为空);
step3: stackCurrent 中元素按序出栈,添加到res([A])中,从左至右将出栈元素的左右节点入栈stackNext;
step4: stack1 =stackNext(不空,BG);stack2 = stackCurrent(为空);转换遍历方向从右至左
第二层:
step1: stack1或者stack2不为空,进入step2;
step2: stackCurrent = stack1(不为空,BG); stackNext = stack2(为空);
step3: stackCurrent 中元素按序出栈,添加到res中,从右至左将出栈元素的左右节点入栈stackNext;
step4: stack1 =stackNext(不空,HDC);stack2 = stackCurrent(为空);转换遍历方向从左至右
public ArrayList<ArrayList<Character>> zigzagLevelOrder (TreeNode root) {
// write code here
ArrayList<ArrayList<Character>> res = new