zoukankan      html  css  js  c++  java
  • 按之字形顺序打印二叉树Java实现

    题目描述

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

    分析

    用一个布尔量控制从左到右还是从右到左的顺序;如果为真则他的左右孩子按照从左到右的顺序放入list中,否则按照从右到左的顺序,当本行结束之后,再把list中的数据放入一个result中。其中用一个null值作为层次的分隔符。

    代码

     1 package com.leetcode.printTreeNode;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Iterator;
     5 import java.util.LinkedList;
     6 
     7 /**
     8  * Created by Feng on 2016/11/8.
     9  * 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,
    10  * 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
    11  */
    12 public class PrintTreeNode {
    13     public static void main(String[] args) {
    14         TreeNode node1 = new TreeNode(1);
    15         TreeNode node2 = new TreeNode(2);
    16         TreeNode node3 = new TreeNode(3);
    17         TreeNode node4 = new TreeNode(4);
    18         TreeNode node5 = new TreeNode(5);
    19         TreeNode node6 = new TreeNode(6);
    20         TreeNode node7 = new TreeNode(7);
    21         TreeNode node8 = new TreeNode(8);
    22         TreeNode node9 = new TreeNode(9);
    23         node1.left = node2;
    24         node1.right = node3;
    25         node2.left = node4;
    26         node2.right = node5;
    27         node3.left = node6;
    28         node3.right = node7;
    29         node4.left = node8;
    30         node4.right = node9;
    31         ArrayList<ArrayList<Integer>> result = printTreeNode(node1);
    32         for (ArrayList list : result) {
    33             for (int i = 0; i < list.size(); i++) {
    34                 System.out.print(list.get(i) + " ");
    35             }
    36         }
    37     }
    38 
    39     public static ArrayList<ArrayList<Integer>> printTreeNode(TreeNode pRoot) {
    40 
    41         ArrayList<ArrayList<Integer>> result = new ArrayList<>();
    42         if (pRoot == null) {
    43             return result;
    44         }
    45 
    46         ArrayList<Integer> list = new ArrayList<>();
    47         LinkedList<TreeNode> queue = new LinkedList<>();
    48         queue.addLast(null);//层分隔符
    49         queue.addLast(pRoot);
    50         boolean leftToRight = true;
    51         while (queue.size() != 1) {
    52             TreeNode node = queue.removeFirst();
    53             if (node == null) {//到达层分隔符
    54                 Iterator<TreeNode> iter = null;
    55                 if (leftToRight) {
    56                     iter = queue.iterator();//从前往后遍历
    57                 } else {
    58                     iter = queue.descendingIterator();//从后往前遍历
    59                 }
    60                 leftToRight = !leftToRight;
    61                 while (iter.hasNext()) {
    62                     TreeNode temp = (TreeNode) iter.next();
    63                     list.add(temp.val);
    64                 }
    65                 result.add(new ArrayList<Integer>(list));
    66                 list.clear();
    67                 queue.addLast(null);//添加层分隔符
    68                 continue;//一定要continue
    69             }
    70             if (node.left != null) {
    71                 queue.addLast(node.left);
    72             }
    73             if (node.right != null) {
    74                 queue.addLast(node.right);
    75             }
    76         }
    77 
    78         return result;
    79     }
    80 
    81 }
    82 
    83 class TreeNode {
    84     int val = 0;
    85     TreeNode left = null;
    86     TreeNode right = null;
    87 
    88     public TreeNode(int val) {
    89         this.val = val;
    90     }
    91 }

    运行结果

    1 3 2 4 5 6 7 9 8 
    Process finished with exit code 0
  • 相关阅读:
    getGuid()
    DELPHI7在WIN8和WIN10下安装和运行
    oracle存储过程返回数据集结果
    咏南多层开发框架支持最新的DELPHI 10 SEATTLE
    咏南中间件支持手机客户端
    最精简的IOCP封装
    完成端口iocp——在螺丝壳里做道场
    异步选择模式中使用完成端口做它的消息队列
    阿里百川IMSDK--自定义群聊界面
    Customizing Navigation Bar and Status Bar
  • 原文地址:https://www.cnblogs.com/lfeng1205/p/6044512.html
Copyright © 2011-2022 走看看