如何解决使用堆栈方法在锯齿形模式java中遍历二叉树不返回任何内容
我的算法是这样工作的: 2 堆栈 Q1 和 Q2,其中 Q1 从二叉树的根开始,然后其子节点存储在堆栈 Q2 中,while 循环运行直到堆栈 Q1 为空。堆栈中的值被弹出并将其子节点添加到 Q2 .当它为空时,我们的Truth值更改为false,从left->right to right->left改变孩子的遍历顺序。每个弹出的值都添加到一个数组列表中,堆栈Q1为空后,将数组列表添加到一个二维数组列表。不幸的是,当我期望它返回树的值时,我的代码没有返回任何内容。
/**
* DeFinition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val,TreeNode left,TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
Stack<TreeNode>Q1=new Stack<>();
Stack<TreeNode>Q2=new Stack<>();
List<List<Integer>>finalarr=new ArrayList<>();//final 2d arraylist
List<Integer>temper=new ArrayList<>();//intermediate 1d arraylist
Boolean Truth=true; //truth variable which changes traversing order
Q1.push(root);
while(!Q1.isEmpty()){
TreeNode ans=Q1.pop();
temper.add(ans.val); //value added to 1d array
if(Truth){
if(ans.left!=null){
Q2.push(ans.left);
}
if(ans.right!=null){
Q2.push(ans.right);
}
}
if(!Truth){
if(ans.right!=null){
Q2.push(ans.right);}
if(ans.left!=null){
Q2.push(ans.left);
}
}
}
if(Q1.isEmpty()){
finalarr.add(temper); //2d array adds 1d array
for(int i=0;i<temper.size();i++){ //values of 1d array deleted
temper.remove(i);
}
Truth=!Truth; //order of traversal reversed
Stack<TreeNode>temp=Q1;
Q1=Q2;
Q2=temp;
}
return finalarr;}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。