zoukankan      html  css  js  c++  java
  • 剑指 Offer 32

    问题描述

    请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

    示例

    给定二叉树: [3,9,20,null,null,15,7],

        3
       / 
      9  20
        /  
       15   7
    

    返回其层次遍历结果:

    [
      [3],
      [20,9],
      [15,7]
    ]
    

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
    if(root==null)
    			 return new ArrayList<List<Integer>>();
    		 	List<List<Integer>> res=new ArrayList<List<Integer>>();
    		 	//正着先右,倒着先左
    		 	List<TreeNode> objective=new ArrayList<TreeNode>();
    		 	objective.add(root);
    		 	List<Integer> t=new ArrayList<Integer>(1);
    		 	t.add(root.val);
    		 	res.add(t);
    		 	List<TreeNode> negetive=new ArrayList<TreeNode>();
    		 	while(objective.size()>0) {
    		 	List<Integer> t1=new ArrayList<Integer>();
    		 	for(int i=objective.size()-1;i>=0;i--) {
    		 		if(objective.get(i).right!=null) {
    		 			t1.add(objective.get(i).right.val);
    		 			negetive.add(objective.get(i).right);
    		 		}
    		 		if(objective.get(i).left!=null) {
    		 			t1.add(objective.get(i).left.val);
    		 			negetive.add(objective.get(i).left);
    		 		}
    		 	}
    		 	if(t1.size()>0)
    		 	res.add(t1);
    		 	objective.clear();
    		 	if(negetive.size()>0) {
    			 	List<Integer> t2=new ArrayList<Integer>();
    			 	for(int i=negetive.size()-1;i>=0;i--) {
    			 		if(negetive.get(i).left!=null) {
    			 			t2.add(negetive.get(i).left.val);
    			 			objective.add(negetive.get(i).left);
    			 		}
    			 		if(negetive.get(i).right!=null) {
    			 			t2.add(negetive.get(i).right.val);
    			 			objective.add(negetive.get(i).right);
    			 		}
    			 	}
    			 	if(t2.size()>0)
    			 	res.add(t2);
    			 	negetive.clear();
    		 	}
    		 	}
    		 	return res;
        }
    }
    

  • 相关阅读:
    mvc原理和mvc模式的优缺点
    Paxos算法详细图解
    环境搭建
    elasticsearch 安装
    redis rdb文件解析
    eclipse 远程调试
    java 解析xml
    理想化 redis
    redis 内存
    工作圈redis 使用
  • 原文地址:https://www.cnblogs.com/code-fun/p/14347753.html
Copyright © 2011-2022 走看看