题解 | #二叉搜索树的后序遍历序列#
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
两个栈,一个存放基数行,一个存放偶数行
基数行的节点,将其 左节点,右节点 依次加入到偶数列栈中
偶数行的节点,将其 右节点,左节点 依次加入到基数列栈中
package com.yzcOfffer.JZ77;
import java.util.ArrayList;
import java.util.Stack;
/**
* @author YZC
* @date 2021/12/5 20:56
*/
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
node1.left = node2;
node1.right = node3;
node3.left = node4;
node3.right = node5;
System.out.println(Print(node1));
}
public static ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
//之字形顺序打印二叉树
ArrayList<ArrayList<Integer>> res=new ArrayList<>();
if(pRoot==null)
return res;
Stack<TreeNode> stack1=new Stack<>();
Stack<TreeNode> stack2=new Stack<>();
stack1.push(pRoot);
while(!stack1.isEmpty() || !stack2.isEmpty()){
ArrayList<Integer> list=new ArrayList<>();
if(!stack1.isEmpty()){
while(!stack1.isEmpty()){
TreeNode temp=stack1.pop();
list.add(temp.val);
if(temp.left!=null) //先左后右
stack2.push(temp.left);
if(temp.right!=null)
stack2.push(temp.right);
}
}else{
while(!stack2.isEmpty()){
TreeNode temp=stack2.pop();
list.add(temp.val);
if(temp.right!=null) //先右后左
stack1.push(temp.right);
if(temp.left!=null)
stack1.push(temp.left);
}
}
res.add(list);
}
return res;
}
}
联想公司福利 1481人发布