103. Binary Tree Zigzag Level Order Traversal

深度优先DFS算法
public class Solution {
   
public List < List < Integer >> zigzagLevelOrder(TreeNode root)
    {
       
List < List < Integer >> sol = new ArrayList<>();
        travel(root, sol,
0 );
       
return sol;
    }
   
   
private void travel(TreeNode curr, List < List < Integer >> sol, int level)
    {
       
if (curr == null ) return ;
       
       
if (sol.size() <= level)
        {
           
List < Integer > newLevel = new LinkedList<>();
            sol.add(newLevel);
        }
       
       
List < Integer > collection  = sol.get(level);
       
if (level % 2 == 0 ) collection.add(curr.val);
       
else collection.add( 0 , curr.val);
       
        travel(curr.left, sol, level +
1 );
        travel(curr.right, sol, level +
1 );
    }
}

广度优先DFS算法
public List < List < Integer >> zigzagLevelOrder(TreeNode root) {
   TreeNode c=root;
  
List < List < Integer >> ans = new ArrayList< List < Integer >>();
  
if (c== null ) return ans;
  
Stack <TreeNode> s1= new Stack <TreeNode>();
  
Stack <TreeNode> s2= new Stack <TreeNode>();
   s1.push(root);
  
while (!s1.isEmpty()||!s2.isEmpty())
   {
      
List < Integer > tmp= new ArrayList< Integer >();
       
while (!s1.isEmpty())
        {
            c=s1.pop();
            tmp.add(c.val);
           
if (c.left!= null ) s2.push(c.left);
           
if (c.right!= null ) s2.push(c.right);
        }
        ans.add(tmp);
        tmp=
new ArrayList< Integer >();
       
while (!s2.isEmpty())
        {
            c=s2.pop();
            tmp.add(c.val);
           
if (c.right!= null )s1.push(c.right);
           
if (c.left!= null )s1.push(c.left);
        }
       
if (!tmp.isEmpty()) ans.add(tmp);
   }
  
return ans;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值