zoukankan      html  css  js  c++  java
  • LeetCode 面试题32

    我的LeetCode:https://leetcode-cn.com/u/ituring/

    我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

    LeetCode 面试题32 - II. 从上到下打印二叉树 II

    题目

    从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

    例如:

    给定二叉树: [3,9,20,null,null,15,7],
    
        3
       / 
      9  20
        /  
       15   7
    返回其层次遍历结果:
    
    [
      [3],
      [9,20],
      [15,7]
    ]
    

    提示:

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路

    思路1-BFS/树的层次遍历

    层次遍历,每层保存到单独的list中;

    算法复杂度:

    • 时间复杂度: $ {color{Magenta}{Omicronleft(n ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(n ight)}} $

    思路2-BFS/树的层次遍历,利用同树高的节点同层的特性

    层次遍历,每层保存到单独的list中,不使用queue,而是按照树高递归处理同层节点;
    若树总节点n个,则递归栈的深度最高为logn;

    算法复杂度:

    • 时间复杂度: $ {color{Magenta}{Omicronleft(n ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(logn ight)}} $

    算法源码示例

    package leetcode;
    
    import java.util.ArrayDeque;
    import java.util.ArrayList;
    import java.util.Deque;
    import java.util.List;
    
    /**
     * @author ZhouJie
     * @date 2020年5月3日 下午4:58:36 
     * @Description: 面试题32 - II. 从上到下打印二叉树 II 
     *
     */
    public class LeetCode_Offer_32_2 {
    
    }
    
    //Definition for a binary tree node.
    class TreeNode_Offer_32_2 {
    	int val;
    	TreeNode_Offer_32_2 left;
    	TreeNode_Offer_32_2 right;
    
    	TreeNode_Offer_32_2(int x) {
    		val = x;
    	}
    }
    
    class Solution_Offer_32_2 {
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年5月3日 下午5:03:55 
    	 * @param: @param root
    	 * @param: @return
    	 * @return: List<List<Integer>>
    	 * @Description: 1-树的层次遍历,每层需要处理一下,记录到list;
    	 *
    	 */
    	public List<List<Integer>> levelOrder_1(TreeNode_Offer_32_2 root) {
    		List<List<Integer>> all = new ArrayList<List<Integer>>();
    		if (root == null) {
    			return all;
    		}
    		Deque<TreeNode_Offer_32_2> deque = new ArrayDeque<TreeNode_Offer_32_2>();
    		deque.offer(root);
    		while (!deque.isEmpty()) {
    			int size = deque.size();
    			List<Integer> list = new ArrayList<Integer>();
    			while (size-- > 0) {
    				TreeNode_Offer_32_2 node = deque.poll();
    				list.add(node.val);
    				if (node.left != null) {
    					deque.offer(node.left);
    				}
    				if (node.right != null) {
    					deque.offer(node.right);
    				}
    			}
    			all.add(list);
    		}
    		return all;
    	}
    
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年5月12日 下午1:38:54 
    	 * @param: @param root
    	 * @param: @return
    	 * @return: List<List<Integer>>
    	 * @Description: 2-BFS,按照树的深度递归;
    	 *
    	 */
    	private List<List<Integer>> all = new ArrayList<List<Integer>>();
    
    	public List<List<Integer>> levelOrder_2(TreeNode_Offer_32_2 root) {
    		treeBFS(root, 0);
    		return all;
    	}
    
    	private void treeBFS(TreeNode_Offer_32_2 root, int n) {
    		if (root == null) {
    			return;
    		}
    		if (all.size() == n) {
    			all.add(new ArrayList<Integer>());
    		}
    		all.get(n).add(root.val);
    		treeBFS(root.left, n + 1);
    		treeBFS(root.right, n + 1);
    	}
    
    }
    
  • 相关阅读:
    系统维护相关问题
    Python环境维护
    哈希表解决字符串问题
    论文笔记二:《A Tutoral on Spectral Clustering》
    论文笔记之哈希学习比较--《Supervised Hashing with Kernels》《Towards Optimal Binary Code Learning via Ordinal Embedding》《Top Rank Supervised Binary Coding for Visual Search》
    Java中String、StringBuffer、StringBuilder的比较与源 代码分析
    浙大pat1040 Longest Symmetric String(25 分)
    浙大pat1039 Course List for Student(25 分)
    浙大pat---1036 Boys vs Girls (25)
    百炼oj-4151:电影节
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12875644.html
Copyright © 2011-2022 走看看