剑指offer算法题
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
public static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
if (pRoot == null) {
return null;
}
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
//二叉树的层次标记
int level = 1;
//保存二叉树当前层次的结点信息
Stack<TreeNode> concurrent = new Stack<>();
concurrent.push(pRoot);
while (!concurrent.isEmpty()){
Stack<TreeNode> to = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();
if (level%2==0){
while (!concurrent.isEmpty()){
TreeNode node = concurrent.pop();
if (node != null) {
//将当前的val添加到list中
list.add(node.val);
//输出当前结点val
System.out.print(node.val+" ");
//偶数层从有向左记录下层结点
if (node.right != null) {
to.push(node.right);
}
if (node.left != null) {
to.push(node.left);
}
}
}
}else {
while (!concurrent.isEmpty()){
TreeNode node = concurrent.pop();
if (node != null) {
//将当前的val添加到list中
list.add(node.val);
//输出当前结点val
System.out.print(node.val+" ");
//奇数层从左向右记录下一层所有结点
if (node.left != null) {
to.push(node.left);
}
if (node.right != null) {
to.push(node.right);
}
}
}
}
//将一层信息添加到结果列表
result.add(list);
//当前层转向下一层
concurrent = to;
//层级标记增加
level++;
//输出结果换行显示
System.out.println();
}
return result;
}
本文介绍了一种特殊的二叉树遍历方法——之字形打印。通过使用两个栈来实现这一功能,使得二叉树的节点可以按照从左至右、从右至左交替的顺序被打印出来。该算法适用于剑指offer等面试题,为二叉树的遍历提供了一种新颖的视角。
3万+

被折叠的 条评论
为什么被折叠?



