Мой код ниже для обхода ордера уровня бинарного дерева. Но он печатает
[[3], [20,9], [20,9], [15,7], [15,7]]
для ввода:
[3,9,20 , ноль, ноль, 15,7]
, где, как и ожидалось, должно быть:
[[3], [20,9], [15,7]]
Я не могу определить как исправить это.
class Solution {
List<List<Integer>> l=new ArrayList<>();
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
zig(root);
return l;
}
public void zig(TreeNode root)
{
int h=height(root);
int itr=1;
for(int i=1;i<=h;i++)
{
//List<Integer> l2=new ArrayList<>();
printzig(root,i,itr,new ArrayList<>());
itr=~itr;
}
}
public void printzig(TreeNode root,int level,int itr,ArrayList l2)
{
if(root==null)
return ;
if(level==1)
{
l2.add(root.val);
l.add(l2);
}
if(itr==1)
{
printzig(root.left,level-1,itr,l2);
printzig(root.right,level-1,itr,l2);
}
else
{
printzig(root.right,level-1,itr,l2);
printzig(root.left,level-1,itr,l2);
}
}
public int height(TreeNode root)
{
if(root==null)
return 0;
int l=height(root.left);
int r=height(root.right);
return (l>r)?l+1:r+1;
}
}