zoukankan      html  css  js  c++  java
  • 从上到下打印二叉树 III

    题解1:基于上一题的递归,给递归函数再加一个变量,代表从左往右还是从右往左

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        List<List<Integer>> node=new ArrayList();
        public List<List<Integer>> levelOrder(TreeNode root) {
            //flag=1表示从左到右
            lei(root,0,true);
            return node;
        }
        public void lei(TreeNode root,int k,boolean flag){
            if(root!=null){
                if(node.size()<=k)node.add(new ArrayList());
                
                if(flag){
                    node.get(k).add(root.val);
                    
                }else{
                    node.get(k).add(0,root.val);
                    
                }
                lei(root.left,k+1,!flag);
                lei(root.right,k+1,!flag);
            }
        }
    }
    

    题解2:层序遍历加倒序

    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            Queue<TreeNode> queue = new LinkedList<>();
            List<List<Integer>> res = new ArrayList<>();
            if(root != null) queue.add(root);
            while(!queue.isEmpty()) {
                List<Integer> tmp = new ArrayList<>();
                for(int i = queue.size(); i > 0; i--) {
                    TreeNode node = queue.poll();
                    tmp.add(node.val);
                    if(node.left != null) queue.add(node.left);
                    if(node.right != null) queue.add(node.right);
                }
                if(res.size() % 2 == 1) Collections.reverse(tmp);
                res.add(tmp);
            }
            return res;
        }
    }
    

    题解3:双端队列

    法2优缺点:

    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            Deque<TreeNode> deque = new LinkedList<>();
            List<List<Integer>> res = new ArrayList<>();
            if(root != null) deque.add(root);
            while(!deque.isEmpty()) {
                // 打印奇数层
                List<Integer> tmp = new ArrayList<>();
                for(int i = deque.size(); i > 0; i--) {
                    // 从左向右打印
                    TreeNode node = deque.removeFirst();
                    tmp.add(node.val);
                    // 先左后右加入下层节点
                    if(node.left != null) deque.addLast(node.left);
                    if(node.right != null) deque.addLast(node.right);
                }
                res.add(tmp);
                if(deque.isEmpty()) break;
                // 打印偶数层
                tmp = new ArrayList<>();
                for(int i = deque.size(); i > 0; i--) {
                    // 从右向左打印
                    TreeNode node = deque.removeLast();
                    tmp.add(node.val);
                    // 先右后左加入下层节点
                    if(node.right != null) deque.addFirst(node.right);
                    if(node.left != null) deque.addFirst(node.left);
                }
                res.add(tmp);
            }
            return res;
        }
    }
    
    

    链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/solution/mian-shi-ti-32-iii-cong-shang-dao-xia-da-yin-er--3/

  • 相关阅读:
    NC 工具的使用教程
    centos7&redhat 之 firewalld 详细介绍配置
    rabbitmq&&erlang 安装
    centos7 rabbitmq 安装
    Centos7 Erlang Solutions 安装
    CentOS7 LVM添加硬盘及扩容
    Linux服务器上监控网络带宽的18个常用命令
    在PowerDesigner中自动生成sqlserver字段备注
    JS 验证URL
    GitHub上整理的一些工具【转载】
  • 原文地址:https://www.cnblogs.com/treasury/p/12742689.html
Copyright © 2011-2022 走看看